1

正確にどこで壊れるか、このイベントの前後に何が実行されるかを知りたい2つのケース:ラインと関数

ラインケース:

(gdb) break test.c:851

コード:

850 setup();
851 return configure();
852 

これはconfigure()を実行しますか?か否か

機能ケース:

(gdb) TestClass::initialize()

コード:

849 initialize(){
850 setup();
851 return configure();
852

setup()を実行しますか?

4

2 に答える 2

3

私の経験では、前の行のコードが完了すると、gdbは壊れます。ブレークポイントからステップすることでこれを確認できます。configure関数のコードが実行され、値が851行目に返され、その時点でreturnキーワードが開始され、その値が返されます。

于 2013-03-07T15:16:08.547 に答える
2

通常、ブレークポイントは、デバッグ用にコンパイルされたときに、使用しているソース行の最初の命令ので停止します。ただし、コードが最適化されると、インライン化と命令の再配置により、直感的でない結果が生じる可能性があります。確かに、アセンブリ命令にブレークポイントを設定してください。

通常、関数の行も最初の行も実行されません。ただし、そうでない場合もあることに注意してください。gdbは提供された情報に依存するため、結果は言語/コンパイラによって異なる可能性があることに注意してください。

于 2013-03-07T15:23:29.073 に答える