`
mryufeng
  • 浏览: 982257 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何用gdb调试erlang运行期(高级)

阅读更多
前些天在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可运行程序

    标题"**gdb调试 RK可运行程序**"指出了我们将在AArch64架构上使用GDB来调试针对Rockchip处理器设计的程序。这通常涉及到嵌入式设备或高性能计算平台,因为Rockchip芯片常见于这些领域。在AArch64架构下,GDB的使用...

    STM32 GDB调试手册

    本手册详细介绍了如何使用 GDB 调试 STM32 微控制器,旨在帮助开发者快速掌握 GDB 调试工具的使用方法,以便更好地 debug STM32 项目。 标题解释 STM32 GDB 调试手册是 STM 官方提供的调试指南,旨在指导开发者使用...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    GDB调试程序[陈皓]&GDB调试工具指南

    GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行时检查和控制程序,对于排查代码错误、理解程序执行流程以及优化性能有着至关重要的作用。 首先,我们要理解GDB的基本概念。GDB是一...

    用GDB调试程序 用GDB调试程序

    * GDB 可以通过命令行来实现调试,例如,使用 `l` 命令来显示源代码,使用 `break` 命令来设置断点,使用 `info break` 命令来显示断点信息。 * GDB 提供了许多有用的功能,例如,可以使用 `next` 命令来单步执行...

    GDB调试手册(中文版)

    GDB调试手册是一份非常适合初学者的中文资源,它详尽地介绍了如何使用GDB这一强大的开源调试工具。GDB,全称GNU调试器,是Linux和其他类Unix系统下用于调试C、C++、Objective-C、Fortran等语言编写的程序的工具。...

    gdb调试详解 讲述如何使用gdb调试以及调试core dump

    * `file [程序名]`: 当以gdb命令直接进入调试的时候,可以使用该命令加载所要调试的程序 调试Core Dump文件 Core Dump文件是程序崩溃后生成的文件,包含程序崩溃时的堆栈信息和其他信息。要调试Core Dump文件,...

    GDB调试精粹及使用实例GDB调试精粹及使用实例

    GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹...

    使用gdb调试嵌入式应用程序

    使用gdb调试嵌入式应用程序 gdb(GNU Debugger)是一款功能强大的源代码调试工具,广泛应用于各种操作系统平台,包括嵌入式系统。使用gdb调试嵌入式应用程序可以帮助开发者快速定位和解决软件 bug,提高开发效率和...

    GDB调试--以汇编语言为例

    在GDB调试器中,可以使用run命令来运行程序,并使用break命令来设置断点。 四、设置断点 在汇编语言中,设置断点需要指定最近的标签的相对位置。例如,在上面的代码中,只有一个标签_start,所以每个断点必须依据_...

    Linux课件:GDB调试简明指南.pdf

    启动 GDB 可以使用命令 `gdb`,并可以指定要调试的程序文件名。如果一切正常,GDB 将被启动,并在屏幕上显示欢迎信息。用户可以在命令行上指定多种选项,例如指定要调试的程序、core 文件、或正在运行的程序。 为了...

    经典实例用GDB调试程序.doc

    GDB,全称为GNU Debugger,是一款由GNU开源组织开发的强大的程序调试工具,尤其在UNIX-like操作系统中广泛使用。GDB提供了丰富的功能,包括启动、控制程序执行、设置断点以及检查程序状态等,帮助开发者深入理解程序...

    GDB调试应用指南Guide.pdf

    GDB(GNU Debugger)是一个在UNIX及UNIX-like操作系统下运行的强大的程序调试工具。GDB能够调试多种编程语言编写的程序,包括但不限于Ada、C、C++、汇编、D、Fortran、Objective-C、Go、Java、Pascal等。在介绍GDB...

    用GDB调试程序

    它的功能强大且灵活,虽然没有图形化界面,但在命令行模式下,GDB提供了丰富的调试功能,使得程序员能深入理解程序运行过程。 首先,GDB可以帮助我们启动程序,并按照自定义的需求来控制程序的执行。比如,你可以...

    Linux下gdb调试工具指南

    ### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是...通过本文的详细介绍,我们不仅了解了GDB的基本使用方法,还探索了其高级功能和实战技巧,希望这能成为你软件调试旅途中的有力助手。

    GDB--gdb调试.pdf

    本文将基于给定的"GDB--gdb调试.pdf"文件内容,深入解析GDB的基本概念、使用方法及高级功能,帮助读者快速掌握GDB调试技巧。 ### GDB概览 GDB是GNU项目的一部分,由Richard Stallman、Roland Pesch、Stan Shebs等...

    GDB基本调试原理及三种调试方式

    2. **运行并调试新进程**:在GDB中指定目标程序后,使用`run`命令启动调试。GDB会创建一个子进程,该子进程通过ptrace(PTRACE_TRACEME)使自己处于被调试状态,然后执行指定的可执行文件。 3. **远程调试**:GDB运行...

Global site tag (gtag.js) - Google Analytics