C++ - есть ли какая-нибудь команда, подобная addr2line в Windows

Если приложение Windows зависало на устройстве пользователя без pdb, оно создавало бы callstack следующим образом:

TestGame  0x000000003f790000 + 1c0c9f1 
TestGame  0x000000003f790000 + 4b8a97c 
TestGame  0x000000003f790000 + 4b8a4f1 
TestGame  0x000000003f790000 + 3608413 
TestGame  0x000000003f790000 + 3630e94 
TestGame  0x000000003f790000 + 413a33e 
TestGame  0x000000003f790000 + 4151d46 
TestGame  0x000000003f790000 + 149c9e6 
TestGame  0x000000003f790000 + 149cc90 
TestGame  0x000000003f790000 + 419cddd 
TestGame  0x000000003f790000 + 41ab698 
TestGame  0x000000003f790000 + 3a909df 
TestGame  0x000000003f790000 + 3a999ff 
TestGame  0x000000003f790000 + 38fd369 
TestGame  0x000000003f790000 + 338688  
TestGame  0x000000003f790000 + 34827c  
TestGame  0x000000003f790000 + 3482da  
TestGame  0x000000003f790000 + 355e16  
TestGame  0x000000003f790000 + 5169f2e 
kernel32      0x0000000076ec0000 + 159cd   
ntdll         0x0000000076fe0000 + 5383d   

но у меня есть файл.PDB на устройстве разработки, поэтому я хочу, чтобы адрес источника был через.PDB. Я знаю команду addr2line который может адресовать строку через.so файл в Linux, мне интересно, есть ли такая команда addr2line на винде.

2 ответа

Решение

Откройте TestGame.exe в windbg, вам нужен точно такой же бинарный файл. Сломай исполнение. Загрузите.pdb для этой версии. Запустите следующую команду:

ln TestGame.exe+0x1c0c9f1

Мне удалось найти это: https://drmemory.org/page_symquery.html Если вы не получили базовый адрес модуля, попробуйте VS'dumpbin.exe /headers xxx.exe, чтобы получить базу изображения.

Другие вопросы по тегам