誰かが私に簡単な概要を教えてください/Cプログラムのスタック(およびヒープ?)を検査する方法のドキュメントを教えてください。これは GDB で行うべきだと思いましたが、他にもっと簡単な代替手段があれば、それも問題ないはずです。
ありがとう。
誰かが私に簡単な概要を教えてください/Cプログラムのスタック(およびヒープ?)を検査する方法のドキュメントを教えてください。これは GDB で行うべきだと思いましたが、他にもっと簡単な代替手段があれば、それも問題ないはずです。
ありがとう。
「x」コマンドで生のメモリをダンプできます
したがって、スタックまたはヒープのビットを見たい場合は、次のようなことを試してください
x/10b &stackvar
x/200b &heapvar-20
最後の例では、heapvar の 20 バイト前から始まる 200 バイトが表示されます。したがって、malloced した場合は、ヒープ ヘッダーも表示されます。
デバッグに GDB を使用する最初の方法は、ブレークポイントを設定することです。これは次のように行われます。
prompt> gdb ./x_bstree.c
(gdb) #prompt
(gdb) b 123 #break at line 123
(gdb) r #start program
これで、プログラムはプログラムの 123 行目で停止します。を使用して、スタックまたはヒープ内の変数を調べることができるようになりましたprint
。スタック変数の場合は、print <varname>
. ヒープ変数 (ポインター) には、 を使用しますprint <*varname>
。スタック/ヒープ変数を調べるために何か特別なことがあるかどうかわかりませんか?
もちろん、マルチスレッド アプリケーションをデバッグするには、シングル スレッド モードで実行してからデバッグする必要があります。そうしないと、何が起こっているのかを予測することが難しくなります。
それ以外については、gdb に関する広範なドキュメントがあり、多くのサイトでgdb チート シートも提供されています。
を使ってみてくださいddd
。ddd マニュアル
Ok。多分私は少し詳しく説明します。こんな感じで使っています。
デバッグ シンボルを使用してプログラムをコンパイルします。
gcc -g program.c -o program
実行ddd
:
ddd program
gui では、あらゆる種類の操作、マシン コードの表示、メモリの表示などを行うことができます。見回す。マニュアルには、スタックを調べるセクションもあります。ddd
C プログラムを調べるための優れたインターフェイスを提供します。