pdb-s を使用せずにリリース (最適化) ビルドでスタック トレースを取得しようとしています。現在、サンプル プログラムの実行中に StackWalk64 関数を使用して関数アドレスを取得し、リンク段階で生成されたマップ ファイルを使用して、生成されたアドレスを実際の関数名にマップしようとしています。最適化がオンになっていることに注意してください。
生成されたマップ ファイルで、2 つの異なる関数のまったく同じアドレスが表示されます。
0001:00000000 ?static_function_call@MyTest@@SAXXZ 00401000 f i main.obj
0001:00000000 ?call_1@MyTest@@QAEXXZ 00401000 f i main.obj
そのようなことの理由は何でしょうか。最適化が原因でしょうか? では、この機能はどのように区別できるのでしょうか? 編集:ここに関数本体があります
#include <iostream>
#include <windows.h>
#include <dbghelp.h>
class __declspec(dllexport) MyTest
{
public:
static void static_function_call()
{
}
void call_1()
{
static_function_call();
};
};
int main( void )
{
try
{
MyTest obj;
obj.call_1();
}
catch( ... )
{
}
return ( 0 );
}
ありがとう、グリゴール