1

C++ プログラムをデバッグするとき、main関数にブレークポイントを設定します。プログラムが実行を開始すると、停止する行の前にソースの数行をスキップしたように見えます。どうしたの?

問題を示すスクリーンショット

4

2 に答える 2

4

あなたのプログラムは最適化を有効にしてコンパイルされている可能性があります。つまり、ソースの行が順番に機械語コードに変換されるとは限りません。最適化の下では、ソース コードのさまざまな部分の実行が並べ替えられたり、インターリーブされたりする可能性があります。

ソース コードを行ごとに単純にステップ実行する場合は、最適化なしでコンパイルする必要があります ( -O0)。

または、マシンコードを理解している場合は、次を使用できます。

set disassemble-next-line on

これにより、デバッガーが停止しているコードの逆アセンブリが、それが属するソース コード行と一緒に表示されます。

于 2013-04-24T05:53:46.217 に答える