2016-06-26 11 views
0

После запуска набора тестов с drmemory в течение ночи я пытаюсь разрешить стеки ошибок, предоставляя символы pdb. Pdb исходят из большого samba-сопоставленного репозитория и использование _NT_SYMBOL_PATH во время выполнения слишком сильно замедляет работу.Послепроцессорные ошибки drmemory с новыми символами после завершения процесса

Кто-нибудь знает инструмент, который обрабатывает результаты .txt и вытягивает новые символы (через NT_SYMBOL_PATH или иным образом), как требуется для создания более подробных стеков? Если нет, какие-либо подсказки для адаптации asan_symbolize.py для этого?

https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py

То, что я придумал до сих пор используя dbghelp.dll ниже. Работает, но может быть лучше.

https://github.com/patraulea/postpdb

+0

Не уверен, что я понимаю, вы имеете в виду вы хотите вывести все символы, которые необходимы до отладки дампа и использовать символы автономный режим, если да проверка symchk/om http s: //msdn.microsoft.com/en-us/library/windows/hardware/ff560061 (v = vs.85) .aspx – blabb

+0

Нет. Процесс не сбой, все ошибки были нефатальными, так что у меня есть трассировки стека в журнале вывода. Я хочу перейти от ** libeay32.dll + 0x1234 ** к ** libeay32.dll! SSL_new_ctx [ssl/ssl3.cpp: 1234] **. – patraulea

+0

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

ответ

1

нормально, этот запрос не относится к использованию WinDbg или не имеет ничего общего с _NT_SYMBOL_PATH

Dr.Memory является memory diagnostic tool сродни valgrind и основан на Dynamorio instumentation framework можно использовать на необработанных немодифицированных бинарных файлов

на окнах вы можете вызвать его как drmemory.exe calc.exe из командной строки (cmd.exe)

как только бинарная завершает выполнение лог-файл с именем results.txt записывается в расположение по умолчанию

если бы установка _NT_SYMBOL_PATH drmemory чтит его и разрешает символьной информации из prepulled файла символа (а именно * .pdb) не кажется для загрузки файлов с сервера символов мс это просто кажется игнорировать SRV * кэш и, кажется, использовать только вниз по течению FOLDER SYMBOL

так, если PDB файл отсутствует или этого не скачал еще

results.txt будет содержать трассировка стека, как

# 6 USER32.dll!gapfnScSendMessage +0x1ce (0x75fdc4e7 <USER32.dll+0x1c4e7>) 
# 7 USER32.dll!gapfnScSendMessage +0x2ce (0x75fdc5e7 <USER32.dll+0x1c5e7>) 

а если символьный файл был доступен он будет показывать

# 6 USER32.dll!InternalCallWinProc 
# 7 USER32.dll!UserCallWinProcCheckWow 

поэтому в основном Вам нужен файл символов для области применения в вопросе

так я комментировал вам нужно получить символы для еха в вопросе

вы также можете использовать symchk в запущенном процессе и создать файл манифеста , и вы можете использовать symchk на компьютере, подключенном к интернету , чтобы скачать символы и скопировать его в локальную папку на non_internet машине и точка _NT_SYMBOL_PATH в эту папку

>tlist | grep calc.exe 
1772 calc.exe   Calculator 

>symchk /om calcsyms.txt /ip 1772 
SYMCHK: GdiPlus.dll   FAILED - MicrosoftWindowsGdiPlus- 
1.1.7601.17514-gdiplus.pdb mismatched or not found 

SYMCHK: FAILED files = 1 
SYMCHK: PASSED + IGNORED files = 27 

>head -n 4 calcsyms.txt 
calc.pdb,971D2945E998438C847643A9DB39C88E2,1 
calc.exe,4ce7979dc0000,1 
ntdll.pdb,120028FA453F4CD5A6A404EC37396A582,1 
ntdll.dll,4ce7b96e13c000,1 

>tail -n 4 calcsyms.txt 
CLBCatQ.pdb,00A720C79BAC402295B6EBDC147257182,1 
clbcatq.dll,4a5bd9b183000,1 
oleacc.pdb,67620D076A2E43C5A18ECD5AF77AADBE2,1 
oleacc.dll,4a5bdac83c000,1 

так предполагается, что вы принес символы легче было бы повторно запустить тесты с локально кэшированных копий файлов символов

Если вы выбрали символы, но вы не можете повторно запускать тесты и должны работать исключительно с выходом из results.txt, у вас есть обработка текста (sed. grep, awk.или пользовательский анализатор)

drmemory люкс с symbolquery.exe в папке бин, и он может быть использован для решения символов из results.txt

в приведенном выше примере вы можете заметить смещение относительно modulebase как 0x1c4e7 в строке # 6 USER32.dll! gapfnScSendMessage + 0x1ce (0x75fdc4e7 {USER32.dll + 0x1c4e7})

так для каждой строки в results.txt вы должны разобрать смещение и вызвать символьный код на модуле, как показано ниже

:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c4e7 
InternalCallWinProc+0x23 
??:0 

:\>symquery.exe -f -e c:\Windows\System32\user32.dll -a +0x1c5e7 
UserCallWinProcCheckWow+0xb3 

простой пример обработки теста из Result.txt и подстриженной выход

:\>grep "^#" results.txt | sed s/".*<"//g 
# 0 system call NtUserBuildPropList parameter #2 
USER32.dll+0x649d9>) 
snip 
COMCTL32.dll+0x2f443>) 

Обратите внимание на comctl32.dll (есть comctl.dll по умолчанию в system32.dll и несколько других в WinSxS вы должно проконсультироваться с другими файлами, как global.log, чтобы просмотреть путь длл нагрузки

symquery.exe -f -e c:\Windows\winsxs\x86_microsoft.windows.common- 
controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll -a +0x2f443 
CallOriginalWndProc+0x1a 
??:0 

symquery.exe -f -e c:\Windows\system32\comctl32.dll -a +0x2f443 
DrawInsert+0x120 <----- wrong symbol due to wrong module (late binding 
/forwarded xxx yyy reasons) 
+0

Спасибо, symquery.exe определенно является отправной точкой. Это занимает 2-3 секунды за звонок из-за необходимости запрашивать msdl.microsoft.com, но это что-то. – patraulea

 Смежные вопросы

  • Нет связанных вопросов^_^