Erlang 提供了一种图形化的源码级别调试器 -- debugger。在一些情况下,可以用于对代码进行单步跟踪调试。下面举例说明如何使用这个工具。
首先需要明确的是,若想要在调试器中启用某个模块,必须先让调试器 解释 该模块。调试器同时需要 .erl 源文件(用于显示源码)和 .beam 字节码文件(需要带有调试信息)。
编译带调试信息的 .beam 文件,要求在编译 .erl 文件时使用 +debug_info 标志。例如
以一个之前学习 mochiweb 使用的 demo 为例。源码位置如下
启动 erl,切换工作路径。
启动 debugger 调试器,此时会弹出 Monitor 窗口。
选择需要调试的 .erl 文件(Module->Interpret),在需要调试的代码位置双击设置断点。
按照 .app 文件中的依赖关系启动相应的应用。
成功启动后,会停在你之前设置的断点处(如果设置的断点位于应用启动时的执行路径上)。此时,可以通过 Step、Next、Continue 和 Finish 按钮进行调试。
若想跟踪进入其他 module 的代码,则需要和上面一样,通过 Module->Interpret 添加相应的 .erl 文件。例如,在添加 mochiweb_example_sup.erl 文件后,点击 Continue 则可以执行到下一个断点处(需要事先在该模块中设置好断点)。
采用类似的方法就可以调试 erlang 的代码了。
注:在按需启动依赖的相应应用时,若提示 already_started 则可以按如下方式停止
首先需要明确的是,若想要在调试器中启用某个模块,必须先让调试器 解释 该模块。调试器同时需要 .erl 源文件(用于显示源码)和 .beam 字节码文件(需要带有调试信息)。
编译带调试信息的 .beam 文件,要求在编译 .erl 文件时使用 +debug_info 标志。例如
1
|
erlc +debug_info -o ebin src/*.erl |
以一个之前学习 mochiweb 使用的 demo 为例。源码位置如下

启动 erl,切换工作路径。

启动 debugger 调试器,此时会弹出 Monitor 窗口。

选择需要调试的 .erl 文件(Module->Interpret),在需要调试的代码位置双击设置断点。


按照 .app 文件中的依赖关系启动相应的应用。

成功启动后,会停在你之前设置的断点处(如果设置的断点位于应用启动时的执行路径上)。此时,可以通过 Step、Next、Continue 和 Finish 按钮进行调试。

若想跟踪进入其他 module 的代码,则需要和上面一样,通过 Module->Interpret 添加相应的 .erl 文件。例如,在添加 mochiweb_example_sup.erl 文件后,点击 Continue 则可以执行到下一个断点处(需要事先在该模块中设置好断点)。


采用类似的方法就可以调试 erlang 的代码了。
注:在按需启动依赖的相应应用时,若提示 already_started 则可以按如下方式停止
1
|
application:stop(mochiweb_example). |