Брейкпоинт в другом домене

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


Однако отладчик упорно игнорировал точку прерывания, хотя показывал, что отладочные символы для метода загружены. И я, откровенно говоря, был в замешательстве. Немного поразмыслив, на ум пришел тот факт, что исполнение кода в новом AppDomain приводит к тому, что в него все сборки загружаются отдельно. Отсюда я пришел к гипотезе, что в новый домен не загрузились отладочные символы. Для проверки моего предположения мы скопировали pdb-файл в тот же каталог, откуда загружалась и отлаживаемая сборка. Кстати, узнать путь реальной загрузки сборки можно либо из окна Output (View-> Output), либо окна Modules (Debug->Windows->Modules). И действительно, при очередной попытке исполнить проблемный код, отладчик наконец-то остановился на долгожданном брейкпоинте.

Комментарии

Sergey Rozovik написал(а)…
Это что...
Мне однажды пришлось pdb-шки прямо в GAC подкладывать чтоб отладиться :))
Андрей Бороздин написал(а)…
Понимаю, сам так регулярно делаю :(. Однако, если это эпизодическая отладка, а не этап процесса разработки,
то может быть удобнее не в GAC копировать, а прямо из студии подгрузить, например через контекстное меню окна Modules.

Популярные сообщения из этого блога

Команды docker save/load, docker export/import – в чем отличие, как и когда ими пользоваться

Как узнать, кто заблокировал файл или папку

Эрик Гамма переходит на работу в Майкрософт