在Visual Studio调试会话期间查找当前目录?

时间:2009-09-02 13:38:07

标签: .net debugging process-explorer

如何找到.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的带注释的屏幕截图:

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

3 个答案:

答案 0 :(得分:26)

在Visual Studio中,在调试选项卡中的项目设置下,您可以根据需要设置“工作目录”。

要在代码中或在断点的即时窗口中确定当前工作目录,请尝试

System.IO.Directory.GetCurrentDirectory()

答案 1 :(得分:4)

在您的代码中,调用函数

System.IO.Directory.GetCurrentDirectory()

默认情况下,除非您更改了项目的Debug属性,否则当前目录将作为项目的bin \ Debug目录(运行.exe的目录)启动。

答案 2 :(得分:-3)

最好的方法是在WinDbg(Windows调试器)中运行应用程序,然后附加到进程并运行!handle命令。每个打开的文件都有一个关联的句柄。通过转储相应进程的所有句柄,您将看到相应的文件路径。

以下是一个例子:

!handle 0 f process-id

将process-id替换为进程ID的值。您也可以使用进程地址代替进程ID。如果这不显示文件对象,则文件句柄已被关闭。在这种情况下,您需要跟踪句柄。这可以使用!htrace命令完成。