6

バックトレースを使用してアプリケーションのスタック トレースを出力していますが、次のような結果が得られます

libQtCore.so.4(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x843) [0x7f889d20cf33]
libQtGui.so.4(_ZN7QAction9triggeredEb+0x32) [0x7f889d76c2f2]
libQtGui.so.4(_ZN7QAction8activateENS_11ActionEventE+0xb0) [0x7f889d76d670]
libQtGui.so.4(+0x6242f4) [0x7f889db862f4]

「リンカー名」を「ソース名」に変換し、オフセットからコード行番号を取得する方法はありますか?

次のようなバックトレースが必要です。

libQtCore.so.4 (QMetaObject::activate(QObject):1022)
libQtGui.so.4  (QAction::triggered()::47) 

アップデート。

コンパイラの仕様により、この手法が機能する場合と機能しない場合、または機能しない場合があることを理解しています。少なくとも gcc とビジュアル C++ でリンカー シンボルを「デマングル」したい。

4

2 に答える 2

6
  • gccでは、 c++filtを使用してマングリングを解読できます。

  • Visual Studioでは、名前を変更できます

少なくともWindowsで関数名を取得したら、 DIASDKを使用してソースファイルの行番号などを取得できます。

于 2011-12-08T16:30:16.127 に答える
2

これは名前マングリングと呼ばれます。ウィキペディアの記事を読んでください。ここで引用するのは答えが多すぎるためです。

于 2011-12-08T16:12:25.130 に答える