Что отличается, когда сборка Debug выполняется с отладкой и без отладки? - PullRequest
7 голосов
/ 03 сентября 2011

Раньше я считал, что если мы получим сборку Debug, то на самом деле не имеет значения:

  1. Мы запустили его.
  2. Или мы отладили его.

все было бы так же.

Однако недавно я столкнулся с двумя разными проблемами, когда стало ясно, что что-то отличается, когда код только запускается или когда отлаживается, даже если версия кода предположительно совпадает. (а именно Свободный NHibernate не может загрузить MySql.Data из GAC в режиме отладки теста и Npgsql - указанный метод не поддерживается )

Мне интересно, в чем разница между этими двумя в .NET 4.0? Понимание того, что отличается, возможно, поможет мне решить проблемы, которые у меня возникают, потому что я, по крайней мере, буду знать, где искать возможные причины ошибок в этих различных случаях. Я не понимаю, когда я запускаю модульные тесты, они все зеленые, но когда я пытаюсь их отладить, я получаю различные исключения ..

Ответы [ 4 ]

4 голосов
/ 06 сентября 2011

Лучшее оружие для решения проблем сборки - fuslogvw.exe , оно показывает, где оно искало сборку и какая конфигурация используется, чтобы сообщить CLR, где найти сборку.

Существует вторичный режим отказа с типом сборок, с которыми у вас проблемы.Эти поставщики базы данных часто являются управляемыми оболочками, которые полагаются на неуправляемые библиотеки DLL для выполнения работы.Windows должна быть в состоянии найти эти библиотеки DLL.Это может привести к сбою, если они не копируются в каталог, который находится в PATH, или копируются в ту же папку, что и основной EXE-файл.Внимательно прочитайте инструкции по развертыванию этих оболочек.

1 голос
/ 13 сентября 2011

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

Параметры «Разрыв, когда исключения пересекают границы AppDomain или управляемые / собственные (только управляемые)»и «Включить только мой код» в «Инструменты / Параметры / Отладка», а параметры в «Отладка / Исключения ...» будут определять, на какие исключения сработает ваш отладчик при запуске.

1 голос
/ 03 сентября 2011

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

0 голосов
/ 06 сентября 2011

Есть несколько вопросов, которые следует остерегаться.

1) Как говорит codeninja, порядок действий может быть другим, если вы нарушите код.

2) Файлы могут находиться в разных местах, и пути могут различаться. Это очень важно, когда у вас есть динамически загружаемые ресурсы или когда библиотеки DLL создаются и копируются в каталог подключаемого модуля. При отладке вы можете случайно загрузить не тот.

3) Наблюдение переменных в отладчике может вызвать оценку. Представьте себе свойство, которое тупо увеличивает свое вспомогательное поле, а затем возвращает увеличенное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...