0

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 );
}

ありがとう、グリゴール

4

0 に答える 0