Проблема с символом отладки
Меня интересует, какой файл символов используется при анализе файла дампа с помощью Windbg или Visual Studio. Предположим, что мое приложение использует служебную библиотеку, и у служебной библиотеки есть связанный файл закрытых символов. Когда в моем приложении происходит аварийный дамп, мне нужен символ библиотеки утилит для анализа всего стека вызовов. Но иногда среды build / runtime / debug устанавливаются с разными версиями служебной библиотеки, которые (наверняка) являются разными версиями символов служебной библиотеки.
Предположим, у нас есть версия (например, версия A) служебной библиотеки (и соответствующий символ) для сборки (ссылка) моего приложения, использующая другую версию (например, версию B) служебной библиотеки (и связанный символ) во время выполнения, когда происходит сбой, и используя другую другую версию (например, версию C) служебной библиотеки (и связанный символ) в Windbg, когда я анализирую аварийный дамп.
У меня вопрос: когда во время выполнения генерируется сбой, для создания дампа сбоя используется символ версии B (чтобы заполнить дамп информацией о символах)? Но при использовании другой версии символа C в среде отладки Windbg возникнет проблема несовпадения символов? А какая версия библиотеки используется для сборки не имеет значения? Все ли мои представления верны?
спасибо заранее, Джордж
2 ответа
Похоже, вы хотите использовать Symbol Server, чтобы WinDBG или VS могли использовать символы, соответствующие сборке библиотеки, которую вы отлаживаете. Если это сторонний компонент, и у вас есть личные символы, вы можете либо разместить их на своем собственном сервере, либо посмотреть, есть ли у третьей стороны общедоступный символьный сервер.
Windbg не будет загружать символы, если они не соответствуют DLL, которую вы отлаживаете, вы можете использовать! Sym noisy, чтобы узнать больше о процессе загрузки символов. Если вы решите не использовать сервер символов, вы можете управлять всеми pdb вручную и загружать их вручную в windbg (используйте lm v, чтобы получить подробную информацию о модуле, загруженном в ваш процесс).
Обычно символы должны находиться в том же файле, что и код (поэтому отладочные версии обычно больше). Я не могу вспомнить случай, когда отладчик извлекал символы из одного двоичного файла при запуске другого - но это из общих знаний, а не из какой-либо специальной информации о вашей среде.