Поиск текущего каталога во время сеанса отладки Visual Studio?
Как найти текущий каталог для приложения .NET
работает под отладчиком Visual Studio?
Обновление 1. Быть ясным: я не хочу менять код
или получить информацию в самой программе - я просто хочу
получить информацию о приложении в настоящее время
отлажено.
При отладке приложения .NET Windows Forms (смешанные VB.NET и
С#) Я не был уверен, откуда находится файл 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:
Alt текст http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png
Ответы
Ответ 1
В Visual Studio в настройках проекта на вкладке отладки вы можете установить "Рабочий каталог", если хотите.
Чтобы определить текущий рабочий каталог в коде или в ближайшем окне в точке останова, попробуйте
System.IO.Directory.GetCurrentDirectory()
Ответ 2
Внутри вашего кода вызовите функцию
System.IO.Directory.GetCurrentDirectory()
По умолчанию, если вы не изменили свойства Debug вашего проекта, текущий каталог запустится как каталог bin\Debug вашего проекта (откуда запускается .exe).
Ответ 3
Лучший способ - запустить приложение в WinDbg (отладчик Windows), затем подключиться к процессу и запустить !handle
. Каждый открытый файл будет иметь связанный дескриптор. Сбрасывая все ручки для соответствующего процесса, вы увидите соответствующий путь к файлу.
Вот пример:
!handle 0 f process-id
Замените идентификатор процесса на значение идентификатора процесса. Вместо идентификатора процесса вы также можете использовать адрес процесса. Если это не показывает объект файла, то дескриптор файла уже закрыт. В этом случае вам нужно отследить ручки. Это можно сделать с помощью команды !htrace
.