Today’s Erlang Thursday continues to take a look at the c module with c:m/1.
c:m/1 takes an atom of a module name, and returns information about the module. It prints out information about the compliation date, time, and options; the object (BEAM) file that it was loaded from, and a list of functions exported by the module.
We’ll start with taking a look at the string module in Erlang.
c:m(string).
% Module string compiled: Date: November 28 2014, Time: 06.47
% Compiler options: [{outdir,"/private/tmp/erlang-pY1Kv2/otp-OTP-17.3.4/lib/stdlib/src/../ebin"},
% {i,"/private/tmp/erlang-pY1Kv2/otp-OTP-17.3.4/lib/stdlib/src/../include"},
% {i,"/private/tmp/erlang-pY1Kv2/otp-OTP-17.3.4/lib/stdlib/src/../../kernel/include"},
% warnings_as_errors,debug_info]
% Object file: /usr/local/Cellar/erlang/17.3.4/lib/erlang/lib/stdlib-2.2/ebin/string.beam
% Exports:
% centre/2 rstr/2
% centre/3 span/2
% chars/3 str/2
% chars/2 strip/1
% chr/2 strip/2
% concat/2 strip/3
% copies/2 sub_string/2
% cspan/2 sub_string/3
% equal/2 sub_word/2
% join/2 sub_word/3
% left/2 substr/2
% left/3 substr/3
% len/1 to_float/1
% module_info/0 to_integer/1
% module_info/1 to_lower/1
% rchr/2 to_upper/1
% right/2 tokens/2
% right/3 words/1
% words/2
% ok
We can see that this was compiled on my machine on November 28th of 2014, and had the warnings_as_errors and debug_info turned on, as well as the location of the beam file, and all of the different functions the string module exports.
Next, we will look at a module compiled from inside the shell.
c(fizzbuzz).
% {ok,fizzbuzz}
c:m(fizzbuzz).
% Module fizzbuzz compiled: Date: August 5 2015, Time: 22.14
% Compiler options: []
% Object file: /Users/proctor/tmp/fizzbuzz.beam
% Exports:
% fizzbuzz/1
% module_info/0
% module_info/1
% ok
c:m(fizzbuzz) shows that it was compiled, and was loaded from my tmp directory, and exports fizzbuzz/1 along with the two versions of module_info that every module exports.
Again, this is one of those functions that you might not use everyday, but when it comes to debugging and inspecting your Erlang application becomes a very useful function to know about.
–Proctor