Как заставить 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, это, вероятно, не будет работать так же хорошо.