2010-01-04 7 views
2

Есть ли способ от WinDbg, не используя API DbgEng, отображать пути сервера символов (т. Е. PdbSig70 and PdbAge) для всех загруженных модулей?WinDbg, отображение Symbol Пути сервера для загруженных модулей (даже если символы не загружались)?

Я знаю, что

lml 

делает это для модулей, чьи символы загружены. Я хотел бы знать эти пути для символов, которые не загружал, чтобы диагностировать проблему. Кто-нибудь знает, возможно ли это, не используя API DbgEng?

отредактирован:

Я также понимаю, что вы можете использовать

!sym noisy 

получить сообщения об ошибках символов нагрузки. В то время как это имеет полезный выход это перемежается с другим выходом, что я хочу, и не просто и понятно, как «LML»

ответ

2

SYM шумным и SYM тихо можно включить дополнительный выход для символа нагрузки, то есть:!

!sym noisy 
.reload <dll> 
X <some symbol in that DLL to cause a load> 
!sym quiet 

Когда отладчик пытается загрузить PDB, вы увидите все пути, которые он пытается загрузить, и если PDB не были найдены или были отклонены.

+0

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

1

Насколько я знаю, в windbg нет готового решения. Ваши варианты состоят в том, чтобы либо написать отличный скрипт, либо расширение, зависящее от того, где вы сильнейший.

Это довольно выполнимо в windbg как сценарий. Информация, которую вы используете, описана в каталоге отладки PE.

Вот код link к образцу кода C++, который подробно описывает извлечение полезной информации (например, имя файла символа в вашем случае). Адаптация к сценарию windbg не должна быть потеть.

Вот еще один полезный pointer с тоннами информации об автоматизации windbg. В частности, речь идет о способах передачи аргументов сценариям windbg (что также полезно в вашем случае, чтобы иметь общий код извлечения информации об ошибке, который вы можете вызвать из цикла итерации загруженных модулей).

+0

Спасибо за ссылки, мне придется изучать код, но с первого взгляда он выглядит полезным –

0

Вы можете использовать команду

lme 

показать модули, которые не имеют каких-либо символов, загруженных.