Невозможно отладить приложение в режиме выпуска даже с DebugType = full

Мы создаем решение для Release, но при попытке подключения с помощью studio 2010 professional ни один поток не отображает информацию о стеке, нельзя установить точку останова и т. Д.

Цель состоит в том, чтобы иметь возможность подключить отладчик Visual Studio / JIT к запущенному процессу, имея при этом как можно больше преимуществ оптимизации.

Большинство наших поисков сводится к `` компиляции с отладкой: полная '', и вы сможете отлаживать, но, похоже, это не так, я считаю, что JIT оптимизирует код во время выполнения, и, следовательно, мы не можем отлаживать, это это правда? Можно ли скомпилировать и указать JIT преуменьшить оптимизацию и разрешить отладку? (с сохранением других оптимизаций)

ОБНОВЛЕНИЕ

используя ответ @ HansPassant, я посмотрел на модули и увидел, что, хотя pdbs находятся в том же каталоге, что и двоичные файлы, на самом деле символы отладки не были загружены. Я также видел, что мои библиотеки помечены как «Код пользователя» - «НЕТ», что, вероятно, является причиной того, что они не были загружены автоматически. Загрузив символы вручную И отключив «just-my-code», я также смог установить точки останова и просмотреть стеки.

Теперь вопрос: почему мой код не помечен как код пользователя? это нормальное поведение? Могу ли я каким-то образом настроить это для своих сборок, чтобы этого избежать?


person Amit Bens    schedule 16.07.2013    source источник
comment
'ни одна точка останова не может быть установлена' ‹- почему бы и нет? это сообщение об ошибке «не найдено совпадений»?   -  person wal    schedule 16.07.2013
comment
@wal См. обновленный вопрос, это была комбинация отсутствующих символов и отключенного "только моего кода"   -  person Amit Bens    schedule 17.07.2013


Ответы (2)


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

Однако вы, конечно, все еще можете проверять стеки вызовов, вы увидите методы, которые не были встроены в трассировку стека. Основные ошибки, которые вы можете сделать:

  • когда вы присоединяете отладчик, вы получаете возможность выбрать тип отладчика. Обязательно выберите «Управляемый», у вас не будет особого смысла использовать собственный отладчик.
  • убедитесь, что вы смотрите на правильный поток, программа может быть прервана в произвольном месте. Используйте Debug + Windows + Threads, чтобы выбрать соответствующий поток.
  • убедитесь, что вы действительно не работаете в каком-то месте вашего кода. Вы можете легко оказаться внутри DLL операционной системы Windows или метода фреймворка, в этом случае будет очень мало на что смотреть. Инструменты + Параметры, Отладка, Символы и включить сервер символов, чтобы трассировки стека, начинающиеся внутри Windows, были точными.
  • отладчик должен уметь находить файлы PDB. Используйте Debug + Windows + Modules, вы увидите сборки, загруженные в процессе. Сначала убедитесь, что тот, который вы хотите отладить, действительно загружен. Щелкните его правой кнопкой мыши и выберите «Информация о нагрузке символа». Показывает, где искал файл PDB.
  • опция «только мой код» может сильно помешать, вы, скорее всего, столкнетесь со значительными фрагментами кода, которые вам не принадлежат. Инструменты + Параметры, Отладка, Общие и отключите эту опцию.
person Hans Passant    schedule 16.07.2013
comment
(+1) Окно «Модули» показало, что мои сборки не обрабатываются как пользовательский код, см. Обновленный вопрос - person Amit Bens; 17.07.2013

Подумал, что я дам дополнительный ответ на ваш обновленный вопрос, чтобы помочь другим.

от Microsoft:

Чтобы отличить пользовательский код от непользовательского кода, Just My Code просматривает файлы символов (.pdb) и оптимизацию программ. Отладчик считает, что код не является пользовательским, когда двоичный файл оптимизирован или когда файл .pdb недоступен.

person Ben Hall    schedule 05.04.2018