2013-02-21 25 views
0

我正在使用gdb調試NS-2,它是網絡協議的模擬器。它需要一個.tcl文件作爲輸入並解釋它。 [我認爲它是一個解釋。]GDB和NS2:如何在某些函數調用時停止程序

某些代碼被寫在TCL(事件和網絡組件的創建)和一些在C++中(尤其是數據包格式,代理等)。

我已經創建了C++的代理,我想在某個函數調用來阻止它,這樣我可以看到堆棧跟蹤,找到其他類以前它被調用。

這是我做了什麼:

有我MyAgent ::功能的一個部分錯誤,這是給段錯誤和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 

現在運行,並沒有在任何地方停止。 :(

我相信,這個函數被調用,因爲當分割故障是發生的歷史,它是在該功能停止

感謝

回答

1

您可以在函數中添加一個斷點。

(GDB)破MyAgent ::()函數

您必須確保與任何選項NEC編譯需要調試符號。在GCC上,使用-g-ggdb選項。

+0

我認爲這是同爲「b MyAgent ::函數()」。我也是這樣做的。它並沒有停止。 – 2013-02-21 09:08:25

+0

你正在調試優化的代碼嗎? – dbrank0 2013-02-21 10:42:09

+0

@ASHISHNEGI你有編譯調試符號嗎? – juanchopanza 2013-02-21 10:46:30

0

您需要-args選項來指定tcl腳本將被執行。

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

您也可以使用:像這樣

運行gdb:與

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

要啓用調試標誌,以C++代碼,如果沒有做它已經,重新配置您的NS2安裝目錄該--with-tcldebug=...,用於調試TCL代碼(您需要首先安裝tcldebug此選項)

+0

'-j 100'導致一百個編譯器同時啓動。這與叉形炸彈相似,可能會導致資源耗盡!總是明智地使用'-j',我只使用它(可用內核的數量 - 1),所以對於四核機器,我只將它設置爲'-j 3' – ekarak 2015-11-10 07:41:39

+0

@ekarak我還沒遇到這個問題在我的機器上(也許我的磁盤太慢了?)。儘管如此,我更新了答案以使用更少的並行進程。 – user000001 2015-11-10 08:43:59