21

特定のファイルの関数を使用しているときにプログラムを停止する方法があるかどうかを知りたいです。理想的には、私が探しているのは次のようなものです:

GDB Stop when use a function from file foo.cpp

これを行う理由は、自分のものではないコードをデバッグしていて、どの関数が呼び出され、どの関数が呼び出されていないのか正確にわからないためです。私が探していることを行うためのGDBの機能、または同様のことを行うための他の推奨される方法はありますか?

ありがとう

4

6 に答える 6

12

rbreak regex

正規表現regexに一致するすべての関数にブレークポイントを設定します。このコマンドは、すべての一致に無条件のブレークポイントを設定し、設定したすべてのブレークポイントのリストを出力します。これらのブレークポイントが設定されると、breakコマンドで設定されたブレークポイントと同じように扱われます。他のブレークポイントと同じ方法で、それらを削除したり、無効にしたり、条件付きにすることができます。

正規表現の構文は、`grep'などのツールで使用される標準の構文です。これはシェルで使用される構文とは異なることに注意してください。たとえば、foo *は、foの後に0個以上のosが続くすべての関数に一致します。指定した正規表現の先頭と末尾に暗黙の。*があるため、fooで始まる関数のみに一致させるには、^fooを使用します。

C ++プログラムをデバッグする場合、rbreakは、特別なクラスのメンバーではないオーバーロードされた関数にブレークポイントを設定するのに役立ちます。

于 2010-07-29T13:25:57.043 に答える
7

rbreak foo.cpp:.

here.は何にでも一致するため、 file のすべての関数で中断しますfoo.cpp

于 2017-06-14T08:03:19.783 に答える
1

次のコマンドを使用できます。

break foo.cpp:function-name
于 2009-01-25T19:48:37.337 に答える
0

gdb ブレークポイントにはいくつかの構文があります...こちらを参照してください。

ただし、ファイル内のどの関数でも壊れません....

編集:すべての関数呼び出しをダミー関数 void foo(void) にし、内部でブレークポイントを作成するなど、愚かなことを行うことができます。少なくともファイル内で中断し、ファイル X のどの関数が呼び出されているかを簡単に見つけることができます。

于 2009-01-24T01:32:30.133 に答える