0

gdbを使用して、ネットワークプロトコルのシミュレーターであるNS-2をデバッグしています。入力として.tclファイルを受け取り、それを解釈します。[通訳だと思います。]

一部のコードはtcl(イベントとネットワークコンポーネントの作成)で記述され、一部はC ++(特にパケット形式、エージェントなど)で記述されています。

C ++でエージェントを作成しましたが、スタックトレースを確認し、その前に呼び出された他のクラスを見つけることができるように、関数呼び出しでエージェントを停止したいと思います。

これは私がしたことです:

MyAgent ::関数の1つにエラーがあり、セグメンテーション違反が発生し、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

今、それは実行され、どこでも停止しません。:(

セグメンテーション違反が発生したとき、その関数で停止していたため、この関数が呼び出されていると確信しています。

ありがとう

4

2 に答える 2

1

その関数にブレークポイントを追加できます。

(gdb)break MyAgent :: function()

デバッグシンボルを取得するために必要なオプションを使用してコンパイルする必要があります。GCCでは、-gまたは-ggdbオプションを使用します。

于 2013-02-21T08:48:31.740 に答える
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

、を使用してtclコードをデバッグすることもでき--with-tcldebug=...ます(このオプションでは、最初にtcldebugをインストールする必要があります)

于 2013-02-21T13:38:33.147 に答える