GDB和NS2:如何在某些函数调用中停止程序

时间:2013-02-21 08:03:15

标签: c++ gdb tcl breakpoints ns2

我正在使用gdb来调试NS-2,它是网络协议的模拟器。它需要一个.tcl文件作为输入并解释它。 [我认为这是一名翻译。]

一些代码用tcl(事件和网络组件的创建)编写,一些用C ++编写(特别是Packet Formats,Agents等)。

我用C ++创建了一个Agent,我想在一些函数调用中停止它,这样我就可以看到堆栈跟踪并找到之前调用过的其他类。

这就是我所做的:

我的一个MyAgent ::函数出现了一些错误,它给出了Segmentation Fault,并且gdb自动停止了。然后我可以看到堆栈跟踪。我纠正了错误。

现在我跑

   gdb ./ns
   b MyAgent::function()
   /*
   When i press TAB after writing "b MyA" it gives me all functions 
   of my class :). when i press enter after above command -- 
   it asks me "Breakpoint on future shared library load" and i say Yes. 
   I hope this is ok ??
   */
   r myfiles/myWireless.tcl

现在它运行并且不会停在任何地方。 :(

我确信正在调用此函数,因为当发生Segmentation故障时,它正在该函数停止。

由于

2 个答案:

答案 0 :(得分:1)

您可以在该函数中添加断点:

  

(gdb)中断MyAgent :: function()

您必须确保使用获取调试符号所需的任何选项进行编译。在GCC上,使用-g-ggdb选项。

答案 1 :(得分:0)

您需要-args选项来指定将要执行的tcl脚本。

像这样运行gdb

gdb -args ./ns  path/to/tcl/script.tcl

要为c ++代码启用调试标志,如果尚未执行,请使用以下命令重新配置ns2安装:

./configure --enable-debug     ;# plus any other flags you use for configuring
make clean
make -j 3                    ;# -j for faster compiling
make install                   ;# optional

您还可以使用--with-tcldebug=...来调试tcl代码(您需要先为此选项安装tcldebug)