Как заставить dbghelp загружать символы из пользовательского хранилища символов?

Есть ли способ для методов SymInitialize и SymFromAddr для автоматической загрузки символов из пользовательского хранилища символов. Я пытаюсь разрешить адрес в удобочитаемом имени функции с помощью SymFromAddr(). Кажется, это работает нормально, если у меня есть символы для данного модуля, хранящиеся локально, однако я хотел бы, чтобы он автоматически загружал их по пути, указанному в SymInitialize, так же, как это делает WinDbg. Я называю SymInitialize так:

SymInitialize(procHandle, "SRV*c:\\symbols*http://msdl.microsoft.com/download/symbols;http://mycustomstore.com/symbols", TRUE);

SymFromAddr возвращает ошибку 487 "Попытка получить доступ к неверному адресу". поскольку он не может найти символ, поскольку он даже не пытался его скачать.

Есть ли способ заставить их скачать?

2 ответа

Решение

Как оказалось, dbghelp.dll нужен symsrv.dll для загрузки символов. Было трудно найти его, поэтому нужна была помощь. Я использовал ведение журнала dbghelp, чтобы помочь отследить проблему https://msdn.microsoft.com/en-us/library/ms680687.aspx

Если вы хотите использовать хранилище символов HTTP, вы определяете его с помощью

.sympath SRV*c:\mysymbols*http://example.com/symbols

Чтобы добавить путь к символу Microsoft, используйте

.symfix+ c:\microsoftsymbols

Просмотр пути к символу WinDbg теперь дает вам:

0:000> .sympath
srv*c:\mysymbols*http://example.com/symbols;SRV*c:\microsoftsymbols*http://msdl.microsoft.com/download/symbols

который говорит нам, что ваш путь к символу был неправильным, так как у него не было второго SRV*...* часть, но только http://..., Если вы скопируете / вставите путь символа из своего кода в WinDbg, это, вероятно, не будет работать так же хорошо.

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