PDB файлы не загружаются
Наше приложение имеет несколько надстроек в виде библиотек DLL во вложенных каталогах. Мы запускаем тесты с экземпляром DbgView, работающим в фоновом режиме, через который мы получаем наши логи. Проблема в том, что мы запускаем тесты на компьютере, отличном от того, на котором мы построили сборку. Это приводит к тому, что записи каталога отладки в заголовке PE (извлеченные с помощью инструмента Dumpbin) в значительной степени недопустимы.
У нас нет сервера символов ничего подобного. Однако все файлы PDB находятся рядом с двоичными файлами в отладочной сборке с правильными именами, поэтому мы надеялись, что они будут найдены без проблем.
Надстройки загружаются с помощью функции Windows LoadLibrary, а затем функция SymLoadModule64 используется для загрузки таблицы символов. В соответствии с возвращаемыми значениями все идет правильно, но когда мы проверяем, какая PDB была фактически загружена с помощью SymGetModuleInfo64, она показывает, что на самом деле ничего. Это также видно из исходной проблемы, которая привела нас к исправлению этой части нашего приложения, которая заключается в том, что стеки вызовов в вышеупомянутых журналах отладки, точнее их части, которые обращаются к надстройкам, перепутаны.
Перепробовал различные версии функций, а также проверил версию библиотеки DbgHelp, но безрезультатно.
Присоединение от VS показывает, что VS действительно может найти PDB, в то время как наш механизм загрузки символов и журналы в окне вывода все еще показывают проблемное поведение. Все, что VS может исправить - это испорченные стеки вызовов.
Загрузка символа DbgHelp инициализируется с корневым каталогом приложения как "SymSearchPath" и с включенным DEFERRED_LOAD. Последний нам нужно было удалить, а первый должен включать каталоги дополнений. Другим решением было переместить файлы PDB в этот корневой каталог.
Согласно справке SymInitialize на MSDN, "SymSearchPath" рекурсивно ищется для файлов PDB, но на самом деле это не так. Другое дело, что каждый раз, когда я просматривал в Интернете порядок поиска методов PDB-файлов, он считывал 1-ю или 2-ю строку в строке, в которой каталог, из которого загружается двоичный файл, ищется для файлов PDB, но как Я объяснил выше, этого тоже не происходит.
В общем, хотя проблема, кажется, решена, здесь есть много путаницы.
Так..
1. Если кто-то знает, как ПРАВИЛЬНО загружаются файлы PDB, это было бы очень полезно...?
2. DbgHelp в основном глючит?
3. Почему "SymSearchPath" не рекурсивно ищется, когда об этом говорится в MSDN?
Кроме того, если у вас есть что-нибудь еще добавить, это будет приветствоваться.
Спасибо за чтение такого длинного поста.