我正在使用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故障时,它正在该函数停止。
由于
答案 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)