вторник, 2 октября 2007 г.

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

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


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

2 комментария:

Sergey Rozovik комментирует...

Это что...
Мне однажды пришлось pdb-шки прямо в GAC подкладывать чтоб отладиться :))

Андрей Бороздин комментирует...

Понимаю, сам так регулярно делаю :(. Однако, если это эпизодическая отладка, а не этап процесса разработки,
то может быть удобнее не в GAC копировать, а прямо из студии подгрузить, например через контекстное меню окна Modules.