main()がbar()を呼び出すfoo()を呼び出したとします。明らかに、foo()とbar()はユーザ/プログラマによって定義された関数です。また、これらの関数は呼び出し元の関数の途中で呼び出されるとします。gdbにユーザが作成した関数を誤って踏んだ後に正常に終了する
私がFoo()にいて、突然bar()に突然足を踏み入れると、bar()を残してGdbで呼び出しを行った後、Foo()
"finish"コマンドを使用しようとしましたが、foo()の関数呼び出しを終了してメインに戻ります。
また、プログラムカウンタがfoo()内の "call bar()"命令を指しているときにのみ "ni"コマンドを使用しましたが、ライブラリ関数ではないため動作しませんでした。ライブラリ関数をスキップするために "ni"が使われていると仮定します。
今のところ私が持っている唯一のアイデアは "コールバー()"の後の命令にブレークポイントを作成することですが、これを実行するより良い方法があるように感じます。ある?
ありがとうございます。
'Finish'は私にとってうまく機能します。 GDBのマニュアルでさえ、「選択されたスタックフレームの関数が返ってくる直後まで実行を続ける」と言われています。 'Finish'コマンドについて –
仕上げはうまくいくはずですが、最適化されたコードをデバッグしている場合やデバッグ情報がない場合は、問題が発生する可能性があります。 – dbrank0