Подтвердить что ты не робот

Любые рекомендуемые настройки VС++ для лучшего анализа PDB в версиях сборки

Существуют ли какие-либо настройки VС++, которые я должен знать о создании более совершенных файлов PDB, содержащих больше информации?

У меня есть система анализа аварийных дампов, основанная на проекте crashrpt.

Кроме того, у моего сервера сборки сборки есть исходный код, установленный на D: \, но у моей машины разработки есть исходный код на C: \. Я ввел исходный путь в настройках VС++, но, просматривая стек вызовов при сбое, он автоматически не переходит к исходному коду. Я верю, что если бы у меня был исходный код dev на D: \, это сработало бы.

4b9b3361

Ответ 1

"Есть ли какие-либо настройки VС++, которые я должен знать о

Удостоверьтесь, что вы отключили указатель рамки. Блог Larry osterman исторические данные о fpo и проблемах, которые он вызывает с отладкой.

Символы загружаются успешно. Он показывает столбец, но двойной щелчок на записи не приводит меня к исходному коду.

Какую версию VS вы используете? (Или вы используете Windbg?)... в VS он должен предварительно запросить источник в первый раз, если он не найдет местоположение. Однако он также сохраняет список источников, которые были "не найдены", поэтому он не просит вас об этом каждый раз. Иногда список не выглядит больно... чтобы получить подсказку, вам нужно перейти к решению explorer/solution node/свойствам/свойствам отладки и отредактировать список файлов в нижней панели.

Наконец, вы можете использовать "разделенные символы". Это файлы pdb, сгенерированные для предоставления информации об отладке для перехода по стоп-косту за FPO, но с удалением исходных данных (наряду с другими данными). Публичные символы для компонентов ОС Windows лишены pdbs. Для вашего собственного кода они просто вызывают боль и не стоят того, если вы не предоставляете свои pdbs внешним. Как у вас будет один из этих ужасных разделенных pdbs? Вы можете использовать их, если вы используете "binplace" с помощью команды -a.

Удачи! Правильная история мини-дампа - это находка для отладки производства.

Ответ 2

Если ваша сборка напрямую из системы управления исходным кодом, вы должны аннотировать ваши файлы pdb с исходными данными файла. Это позволяет автоматически извлекать точные исходные файлы во время отладки. (Это те же процессы, что и для получения исходного кода .Net framework).

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/magazine/cc163563.aspx. Если вы используете subversion как ваш SCM, вы можете проверить проект SourceServerSharp.

Ответ 3

Вы можете попытаться использовать команду MS-DOS subst, чтобы назначить каталог исходного кода на диск D:.

Ответ 4

Это процедура, которую я использовал после некоторых проблем, похожих на ваши:

a) Скопированный на производственный сервер все файлы EXE и DLL, которые были созданы, каждый с соответствующим PDB в тот же каталог, запустил систему и ожидал, что произойдет сбой.

b) Скопировал все файлы EXE, DLL и PDB на машину разработки (во временную папку) вместе с мини-пульсом (в той же папке). Использовал Visual Studio для загрузки minidump из этой папки.

Так как VS нашел исходные файлы, в которых они были первоначально скомпилированы, он всегда мог их идентифицировать и правильно загружать. Как и с вами, в производственной машине использовалось не C:, но в машине для разработки это было.

Еще два совета:

  • Одна вещь, которую я часто делал, заключалась в том, чтобы скопировать EXE/DLL, восстановленную и забыть скопировать новый PDB. Это разрушило цикл отладки, VS не смог бы показать мне стек вызовов.

  • Иногда я получил стек вызовов, который не имел смысла в VS. После некоторой головной боли я обнаружил, что windbg всегда показывает мне правильный стек, но VS часто не будет. Не знаю, почему.

Ответ 5

В случае, если кто-то заинтересован, сотрудник ответил на этот вопрос мне по электронной почте:

Артем писал (а):

Есть флаг MiniDumpWriteDump() которые могут лучше справляться с дампами, которые позволит видеть полное состояние программы, со всеми глобальными переменными и т.д. Что касается я сомневаюсь, что они могут быть лучше из-за оптимизации... если вы не включите (возможно, некоторые) оптимизация выключена.

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

На самом деле существует много типов дампов, возможно, вы могли бы выбрать один маленький достаточно, но все еще имеет больше информации http://msdn.microsoft.com/en-us/library/ms680519(VS.85).aspx

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

Я заметил некоторые из этих типов дампов не поддерживаются в dbghelp.dll версии 5.1, которую мы используем. Мы могли бы обновите его до новейшей версии 6.9 хотя, я только что проверил EULA для MS Debugging Tools - новейший dbghelp.dll все еще в порядке перераспределить.

Ответ 6

Является ли Visual Studio запрашивающим путь к исходному файлу? Если это не так, то он не считает, что у него есть символы для вызова. Настройка пути источника должна работать без отображения точного исходного местоположения.

Вы можете узнать, загружены ли символы, просмотрев окно "modules" в Visual Studio.

Предполагая, что вы создаете PDB, я не думаю, что есть какие-либо опции, которые напрямую контролируют объем информации в PDB. Вы можете изменить тип оптимизаций, выполняемых компилятором, чтобы улучшить уровень отладки, но это будет стоить производительности - как указывает ваш коллега, отключая встроенный, вы сможете сделать вещи более очевидными в файле сбоя, но будет стоить во время выполнения.

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

Ответ 7

Является ли Visual Studio подсказкой для путь к исходному файлу?

Нет.

Если это не так, то он не считает, что у него есть символы для вызова. Установка источника путь должен работать без необходимости сопоставления точное исходное местоположение.

Символы загружаются успешно. Он показывает callstack, но двойной щелчок на записи не приводит меня к исходному коду. Я могу, конечно, искать в файлах для рассматриваемой строки, но это тяжелая работа:)