如何在Visual Studio 2010中调试从另一个进程启动的C#.NET应用程序

我有一个用C#和PDF打印机编写的.NET GUI应用程序。 PDF打印机有一个字段,您可以在其中设置启动外部应用程序的命令。

在这种情况下,我可以使用此打印机打印文档,打印机将文件路径启动我的EXE文件作为参数生成的PDF文件。 如何从打印机启动应用程序时调试我的应用程序?

在Visual Studio 2010中,我可以为命令行参数设置调试信息,这样可以正常工作。 但是,如果从打印机启动应用程序,则应用程序无法正常工作。 因此,我想从打印机启动时调试我的应用程序。 我怎样才能做到这一点? 是否有参数在调试模式下启动EXE文件或类似的东西?

您可以在开始使用小型注册表调整时附加到进程。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 

使用可执行文件的名称创建一个新密钥,因为它将显示在任务管理器中 ,例如myapp.exe 。 在此下,创建一个名为debugger的新字符串值,并将其设置为vsjitdebugger.exe

现在,当触发EXE文件时,将出现一个窗口,询问要附加到哪个调试器。

尝试附加到该过程:

http://msdn.microsoft.com/en-us/library/c6wf8e4z.aspx

附加到正在运行的进程1.在“调试”菜单上,选择“附加到进程”。 如果没有打开任何项目,请在“工具”菜单上选择“附加到进程”。

2.在“附加到进程”对话框中,从“可用进程”列表中找到要附加到的程序。

a。如果要调试的程序在另一台计算机上运行,​​则必须先选择远程计算机。 有关更多信息,请参见如何:选择远程计算机。

b。如果进程在其他用户帐户下运行,请选中“显示所有用户的进程”复选框。

c。如果通过“远程桌面连接”进行连接,请选中“在所有会话中显示进程”复选框。

3.在“附加到”框中,确保列出要调试的代码类型。 默认的“自动”设置会尝试确定要调试的代码类型。 如果自动设置不合适:

a。单击“选择”。

b。在“选择代码类型”对话框中,单击“调试这些代码类型”,然后选择要调试的类型。

c。单击“确定”。

4.单击“附加”。

打开“进程”对话框时,将自动显示“可用进程”列表。 对话框打开时,进程可以在后台启动和停止。 但是,内容并不总是最新的。 您可以随时刷新列表以通过单击“刷新”查看当前的进程列表。

在调试时,您可以连接到多个程序,但在调试器中只有一个程序处于活动状态。 您可以在“调试位置”工具栏或“进程”窗口中设置活动程序。 有关更多信息,请参见如何:设置当前程序。

所有调试菜单执行命令都会影响活动程序。 您可以从“进程”对话框中断任何已调试的程序,或从“调试”菜单中断所有连接的程序。 有关更多信息,请参见如何:中断执行。

考虑在代码中添加一个调用,该调用显式请求在当前位置附加调试器。 自Win32起,它就已存在,并在.NET中表现为System.Diagnostics.Debugger.Break (和System.Diagnostics.Debugger.Launch )。

如果您不想在第一次执行此操作时,还可以添加逻辑以决定何时触发此操作:

  #if DEBUG if (++staticCounter > 3) System.Diagnostics.Debugger.Break(); #endif 

当然,您需要将其禁用以进行生产。