Как «расшифровать» имена методов компоновщика? - PullRequest
5 голосов
/ 08 декабря 2011

Я использую backtrace для печати трассировки стека приложения и получаю что-то вроде

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]

Есть ли способ конвертировать "linker-names" в "source-names" и получить строку кодачисла со смещений?

Я хочу получить обратную трассировку, похожую на эту:

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

UPD.

Я понимаю, эта техника может работать или не работать или работать плохо из-за особенностей компилятора,Я хочу "разобрать" символы компоновщика по крайней мере в gcc и Visual C ++.

Ответы [ 2 ]

6 голосов
/ 08 декабря 2011

Если у вас есть имя функции, которое вы используете в Windows, вы можете использовать DIA SDK для получения номеров строк исходного файла и т. Д.

2 голосов
/ 08 декабря 2011

Это называется название искажения .Прочтите, пожалуйста, статью в Википедии, так как цитирование здесь будет слишком много для ответа.

...