1

Call StackVisual Studio 2010のウィンドウで、行番号の横にあるバイトオフセットは何を指しますか?

Test.exe!__tmainCRTStartup()  Line 547 + 0x2c bytes

スタックフレームの中にはバイトオフセットがあるものとないものがあるのはなぜですか?

4

1 に答える 1

6

一般に、デバッガーには、__tmainCRTStartup() などのパブリック シンボルのアドレスしかありません。ただし、関数の先頭からの任意のオフセットで、その関数内でコードが実行されている可能性があります。そのための記号なし。したがって、シンボルのアドレスからのオフセットが表示されます。

リリース ビルド コードをデバッグしている場合も注目に値します。シンボルが .pdb ファイルに含まれていない関数内で実行されているコードが原因で、大きなオフセットが発生している可能性があります。コード オプティマイザーがコードを移動した後に行番号が無意味になるため、リリース ビルド コードでは非常に一般的な行番号も失われます。行番号は、リンカーの /PDBSTRIPPED オプションによって .pdb ファイルから削除されました。

+0x2c のようなオフセットは、それが実際に指定された関数内にあることを示すかなり信頼できる指標です。オッズは、オフセットが大きくなるほど徐々に低下します。たとえば、+0x2000 オフセットに表示されるシンボルは、ほぼ確実に信頼できません。Windows システム DLL のシンボル ファイルを使用してデバッグする場合は珍しくありません。

簡単に言えば、関数の開始からの実行中の命令のオフセットが表示されます。

于 2012-12-15T16:28:52.293 に答える