前些天在erlang的源码里面闲逛的时候发现了 bin目录下的cerl,一看原来是个调试的高级货。
我之前写过一篇文章
http://mryufeng.iteye.com/blog/113852 如何调试erlang 但是这是土八路的方法, cerl才是现代化工业。
# This is a script to start Erlang/OTP for debugging. PATH is set to
# include this script so if slave nodes are started they will use this
# script as well.
#
# usage: cerl [ OPTIONS ] [ ARGS ]
#
# The OPTIONS are
#
# -rootdir $MYROOTDIR
# Run an installed emulator built from this source
# -debug Run debug compiled emulator
# -gdb Run the debug compiled emulator in emacs and gdb.
# You have to start beam in gdb using "run".
# -break F Run the debug compiled emulator in emacs and gdb and set break.
# The session is started, i.e. "run" is already don for you.
# -xxgdb FIXME currently disabled
# -purify Run emulator compiled for purify
# -quantify Run emulator compiled for quantify
# -purecov Run emulator compiled for purecov
# -gcov Run emulator compiled for gcov
# -valgrind Run emulator compiled for valgrind
# -lcnt Run emulator compiled for lock counting
# -nox Unset the DISPLAY variable to disable us of X Windows
#
要使用cerl 我们最好准备个调试版本的erlang。R13B 修正了些编译错误,可以编译出debug版本的系统:./configure && make TYPE=debug && make
这样就生成了个beam.debug的运行期。
我们要调试的时候 就可以在otp的binx目录下运行 cerl -debug -gdb -break main
这时候cerl自动会加载 emacs 启动 gud, 整个过程都是自动的。但是这个脚本有点小问题, gud模型下没有把源码和当前对应的调试对应起来。可以通过以下方式修正:
yu-fengdemacbook-2:bin yufeng$ diff cerl cerl2
284c284
< exec $EMACS --eval "(progn (gdb \"gdb $EMU\") $gdbcmd)"
---
> exec $EMACS --eval "(progn (gdb \"gdb --annotate=3 $EMU\") $gdbcmd)"
具体的操作和界面可以参照这篇文章:
http://www.nabble.com/printing-of-Eterm%27s-from-gdb-td19240493.html
在调试的时候 我们会希望查看 eterm的值,但是由于eterm的格式非常复杂, gdb的print什么的无法满足我们的需求。 otp开发团队于是开发出了一套方法来减轻我们的负担:
1. erts/etc/unix/etp-commands 这是gdb的脚本 包含了几十个etp方法,而且文档非常详细。
2. 源码里面的 pp, ps等函数, 这些函数是专门为gdb调试开发的。 可以用gdb的 call pp(xxx)来调用。
有了这些工具 调试和研究erts变成了一件很快乐的事情!
另外调试的方法可以参照这篇文章:[url] http://mryufeng.iteye.com/blog/437772[/url]
分享到:
相关推荐
标题"**gdb调试 RK可运行程序**"指出了我们将在AArch64架构上使用GDB来调试针对Rockchip处理器设计的程序。这通常涉及到嵌入式设备或高性能计算平台,因为Rockchip芯片常见于这些领域。在AArch64架构下,GDB的使用...
本手册详细介绍了如何使用 GDB 调试 STM32 微控制器,旨在帮助开发者快速掌握 GDB 调试工具的使用方法,以便更好地 debug STM32 项目。 标题解释 STM32 GDB 调试手册是 STM 官方提供的调试指南,旨在指导开发者使用...
陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...
GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行时检查和控制程序,对于排查代码错误、理解程序执行流程以及优化性能有着至关重要的作用。 首先,我们要理解GDB的基本概念。GDB是一...
* GDB 可以通过命令行来实现调试,例如,使用 `l` 命令来显示源代码,使用 `break` 命令来设置断点,使用 `info break` 命令来显示断点信息。 * GDB 提供了许多有用的功能,例如,可以使用 `next` 命令来单步执行...
GDB调试手册是一份非常适合初学者的中文资源,它详尽地介绍了如何使用GDB这一强大的开源调试工具。GDB,全称GNU调试器,是Linux和其他类Unix系统下用于调试C、C++、Objective-C、Fortran等语言编写的程序的工具。...
* `file [程序名]`: 当以gdb命令直接进入调试的时候,可以使用该命令加载所要调试的程序 调试Core Dump文件 Core Dump文件是程序崩溃后生成的文件,包含程序崩溃时的堆栈信息和其他信息。要调试Core Dump文件,...
GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹...
使用gdb调试嵌入式应用程序 gdb(GNU Debugger)是一款功能强大的源代码调试工具,广泛应用于各种操作系统平台,包括嵌入式系统。使用gdb调试嵌入式应用程序可以帮助开发者快速定位和解决软件 bug,提高开发效率和...
在GDB调试器中,可以使用run命令来运行程序,并使用break命令来设置断点。 四、设置断点 在汇编语言中,设置断点需要指定最近的标签的相对位置。例如,在上面的代码中,只有一个标签_start,所以每个断点必须依据_...
启动 GDB 可以使用命令 `gdb`,并可以指定要调试的程序文件名。如果一切正常,GDB 将被启动,并在屏幕上显示欢迎信息。用户可以在命令行上指定多种选项,例如指定要调试的程序、core 文件、或正在运行的程序。 为了...
GDB,全称为GNU Debugger,是一款由GNU开源组织开发的强大的程序调试工具,尤其在UNIX-like操作系统中广泛使用。GDB提供了丰富的功能,包括启动、控制程序执行、设置断点以及检查程序状态等,帮助开发者深入理解程序...
GDB(GNU Debugger)是一个在UNIX及UNIX-like操作系统下运行的强大的程序调试工具。GDB能够调试多种编程语言编写的程序,包括但不限于Ada、C、C++、汇编、D、Fortran、Objective-C、Go、Java、Pascal等。在介绍GDB...
它的功能强大且灵活,虽然没有图形化界面,但在命令行模式下,GDB提供了丰富的调试功能,使得程序员能深入理解程序运行过程。 首先,GDB可以帮助我们启动程序,并按照自定义的需求来控制程序的执行。比如,你可以...
### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是...通过本文的详细介绍,我们不仅了解了GDB的基本使用方法,还探索了其高级功能和实战技巧,希望这能成为你软件调试旅途中的有力助手。
本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...
2. **运行并调试新进程**:在GDB中指定目标程序后,使用`run`命令启动调试。GDB会创建一个子进程,该子进程通过ptrace(PTRACE_TRACEME)使自己处于被调试状态,然后执行指定的可执行文件。 3. **远程调试**:GDB运行...