Как я могу восстановить символы из следа сборки релиза?

У меня есть исходный код приложения, которое я скомпилировал и передал другу. В приложении есть обработчик сигналов, который сохранит трассировку стека на диск (через backtrace или версию для Windows). После того, как произошло исключение, и программа сохранила стек на диск, мой друг дал мне копию файла, и я хочу перевести адреса обратно в символы. Как я могу это сделать?

0

Решение

Без файла аварийного дампа это может быть сложно, поскольку ASLR (рандомизация разметки адресного пространства) может помещать код по разным адресам при каждом запуске.

Лучший способ справиться с этим — также создать файл аварийного дампа, тогда отладчик (Visual Studio или WinDbg) сможет преобразовать адреса обратно в нужные вам функции. В моем собственном приложении я создаю файл аварийного дампа из кода всякий раз, когда у меня происходит сбой (ищите функцию MiniDumpWriteDump в DBGHELP.DLL), но вы также можете вручную создать аварийный дамп запущенного приложения с помощью внешней утилиты (диспетчер задач из Windows, Process Explorer или ProcDump от SysInternals).

Затем вы можете легко загрузить файл дампа в отладчик и использовать его для преобразования адресов в имена функций. Например. в Visual Studio откройте окно разборки и введите адрес функции.

Некоторые другие утилиты используют тот же трюк. Например. Очень Сонный CS (https://github.com/CyberShadow/verysleepy) может создать файл аварийного дампа при профилировании приложения в среде, где у вас нет готовых символов. Разрешение адресов в именах функций затем выполняется позже. Адреса сопоставляются со смещениями в DLL / EXE (с помощью файла аварийного дампа) и с именами функций (с помощью файла PDB).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector