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

Отладка выпускной версии DLL (с ​​файлом PDB)

Если у меня есть DLL (которая была построена в режиме release) и соответствующий файл PDB, можно ли отлаживать (пошаговые) классы/методы, содержащиеся в этой DLL?

Если да, то каковы требуемые шаги/настройки (например, где разместить файл PDB)?

Edit:

Если файл PDB находится в том же месте, что и DLL (в каталоге bin/debug простого приложения для тестирования консоли). Я вижу, что символы для DLL загружаются (в окне "Выход", а также в окне "Модули" ), но все же я не могу входить в методы этой DLL.

Может ли это быть результатом оптимизации компилятора (как описано Майклом в его ответе)?

4b9b3361

Ответ 1

Наконец-то я нашел причину проблем с отладкой DLL, которая была построена в конфигурации выпуска:

Прежде всего, он в основном работает так, как ожидалось. Это означает, что если у меня есть DLL, встроенная в конфигурацию release плюс соответствующий файл PDB, тогда я могу отлаживать классы/методы, содержащиеся в этой DLL.

Когда я впервые попробовал это, я, к сожалению, попытался перейти к методам класса с DebuggerStepThroughAttribute, например:

[System.Diagnostics.DebuggerStepThrough]
public class MyClass {
    public void Test() { ... }
}

В этом случае, конечно, невозможно ввести метод из отладчика (как ожидалось/предполагалось).

Итак, все работает по назначению. Большое спасибо за ваши ответы.

Ответ 2

Обычно pdb (для меня) обнаружен, если он находится рядом с dll (например, с файлами xml intellisense).

В качестве альтернативы; вам понадобится точка останова после загрузки модуля...

В точке разрыва вызовите окно "Модули" (Ctrl + D, M или Debug- > Windows- > Modules). Щелкните правой кнопкой мыши на вашей DLL "Загрузить символы из", "Путь символов" и т.д.

Ответ 3

Да, вы можете отлаживать код выпуска с помощью PDB. Однако есть некоторые подводные камни с отлаживанием оптимизированного кода, более подробная информация здесь и здесь.

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

Ответ 4

Отладка сборки релиза обычно намного сложнее, чем отладка отладочной версии. В общем, вам потребуется некоторое понимание ассемблера x86, и вы, скорее всего, потратите некоторое время, глядя на окно разборки. Это, как правило, единственный способ выяснить, какая строка кода вы действительно используете, поскольку в сборке релизов с оптимизациями на компиляторе может быть значительная вставка и переупорядочение команд. Кроме того, я считаю, что отладчик часто не может правильно сообщать значения переменных. Если вам нужно знать значение переменной, и вы не уверены, что отладчик прав, перейдите в окно дизассемблирования и найдите ячейку памяти или зарегистрируйте ее.

Файлы pdb могут храниться на сервере Symbol. Проверьте Настройка сервера Symbol для хорошего учебника. Каждый продукт, который мы строим на машине сборки, публикует символы на нашем сервере символов, поэтому мы всегда можем отлаживать любые аварийные дампы, которые мы получаем от WinQual.