4

test.cc以下のように簡単に書きました。

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello world" << endl;
  return 0;
}

そして、私は次のようにコンパイルしました:

g++ -g test.cc -o test.o

実行して、次の行gdbにブレークポイントを設定しました。"Hello world"

$ gdb test.o
(gdb) b 7
(gdb) c

その後、ラインでgdb停止しますが、実行すると"Hello world"

(gdb) s

関数にステップインできませんcout。だから私の質問は、どうすればcout関数にステップインできますか?

4

2 に答える 2

6

デバッグ情報を含む標準ライブラリのバージョンに対してリンクされていない場合、ライブラリにステップインする方法がわかりません。ステップ オーバーのみが可能です (つまり、制御がデバッグ情報を含むコードに戻るまで実行されます)。

標準 C および C++ ライブラリのデバッグ バージョンをインストールする方法については、システムのドキュメントを参照してください。

于 2012-04-16T00:45:54.067 に答える
1

デバッグ情報がなくてもデバッグすることは可能ですが、はるかに面倒です。ここを参照してください。

私のように、深く掘り下げずに同じ関数への他の呼び出しを中断したいだけの場合は、 を使用して逆アセンブリから取得した関数アドレスにブレークポイントを設定することはそれほど難しくありませんdisas

于 2013-10-02T09:47:39.157 に答える