Поиск текущего каталога во время сеанса отладки Visual Studio?

Как найти текущий каталог для приложения.NET, работающего под отладчиком Visual Studio?

Обновление 1. Чтобы было ясно: я не хочу менять код или получать информацию в самой программе - я просто хочу получить информацию о приложении, которое в настоящее время отлаживается.

При отладке приложения.NET Windows Forms (смешанные VB.NET и C#) я не был уверен, из какого места читается файл XML. Я ожидал, что текущий каталог будет каталогом приложения. Однако, используя Process Explorer, свойства для процесса приводят к:

D: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \

(щелкните правой кнопкой мыши по процессу / Свойства / вкладка Изображение / Текущий каталог).

При наведении курсора на процесс в главном окне Process Explorer был получен другой результат (см. Скриншот ниже):

D: \ dproj \ DTASCall \ DTASuperCharge \ Bin \

Что правильно?

При запуске приложения в автономном режиме отображается ожидаемый текущий каталог,

D: \ dproj \ DTASCall \ DTASuperCharge \ Bin \

в окне свойств процесса Process Explorer.


Аннотированный снимок экрана Process Explorer:

http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

3 ответа

В Visual Studio, в настройках проекта на вкладке отладки, вы можете установить "Рабочий каталог", если хотите.

Чтобы определить текущий рабочий каталог в коде или в ближайшем окне в точке останова, попробуйте

System.IO.Directory.GetCurrentDirectory()

В вашем коде вызовите функцию

System.IO.Directory.GetCurrentDirectory()

По умолчанию, если вы не изменили свойства Debug вашего проекта, текущий каталог будет запускаться как каталог bin\Debug вашего проекта (откуда запускается.exe).

Лучший способ - запустить приложение в WinDbg (отладчик Windows), затем подключиться к процессу и запустить !handle команда. Каждый открытый файл будет иметь связанный дескриптор. Сбросив все дескрипторы для соответствующего процесса, вы увидите соответствующий путь к файлу.

Вот пример:

!handle 0 f process-id

Замените идентификатор процесса значением вашего идентификатора процесса. Вместо идентификатора процесса вы также можете использовать адрес процесса. Если это не показывает объект файла, то дескриптор файла уже был закрыт. В этом случае вам нужно отследить ручки. Это можно сделать с помощью !htrace команда.

Другие вопросы по тегам