我使用回溯到打印應用程序的堆棧跟蹤和我越來越像如何「解密」鏈接器方法名稱?
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)
UPD。
據我所知,由於編譯器的具體情況,這種技術可能工作或不工作或工作不好。我想至少在gcc和visual C++中「去除」鏈接器符號。
C++ FILT是你的朋友 – fjardon
@fjardon,我可以從源代碼使用這種方法嗎?有沒有什麼 char * s = cpp_filt(MyStackString); – Arenim
@fjardon,C++ filt只能使用gcc名稱,而MSVS或任何其他編譯器可能使用不同的規則。 –