我想在生成一个进程(a.exe)时附加它,它可以在VS中使用吗?我只知道进程的名称。实际上,我想完成的工作是在c#代码中设置一个断点,但是该代码属于另一个可执行文件,它将由当前运行的应用程序(c.exe)启动。该代码在初始化期间内,因此我无法手动进行附加。
Answers:
当我之前遇到这种情况(并且我控制了两个进程)时,我发现一个不错的解决方法是在生成进程的入口点中调用Debugger.Launch()。VS然后将弹出一个对话框,让您附加到该过程。
请参阅MSDN文章“如何:自动启动调试器-这将使人们跳过单击确认对话框的繁琐工作(无需关闭UAC或其他混乱)”。本文列出了以下步骤:
- 启动注册表编辑器(regedit)。
- 在注册表编辑器中,打开HKEY_LOCAL_MACHINE文件夹。
- 导航到HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image文件执行选项。
- 在“图像文件执行选项”文件夹中,找到要调试的应用程序的名称,例如myapp.exe。如果你不能找到应用程序要调试:
一。右键单击“图像文件执行选项”文件夹,然后在快捷菜单上单击“新建密钥”。
b。右键单击新密钥,然后在快捷菜单上单击重命名。C。将密钥名称编辑为您的应用程序名称;在此示例中,为myapp.exe。- 右键单击myapp.exe文件夹,然后在快捷菜单上单击新建字符串值。
- 右键单击新的字符串值,然后在快捷菜单上单击“重命名”。
- 将名称更改为调试器。
- 右键单击新的字符串值,然后在快捷菜单上单击“修改”。出现“编辑字符串”对话框。
- 在“数值数据”框中,键入vsjitdebugger.exe。
- 单击确定。
- 从注册表菜单中,单击退出。
- 包含vsjitdebugger.exe的目录必须位于您的系统路径中。将它添加到系统路径,请按照下列步骤操作:
一。在“经典”视图中打开“控制面板”,然后双击“系统”。
b。单击高级系统设置。
C。在“系统属性”中,单击“高级”选项卡。
d。在高级选项卡上,单击环境变量。
e。在“环境变量”对话框的“系统变量”下,选择“路径”,然后单击“编辑”按钮。
F。在里面在“编辑系统变量”对话框中,将目录添加到“变量值”框中。使用分号将其与列表中的其他条目分开。
G。单击“确定”关闭“编辑系统变量”对话框。
H。单击“确定”关闭“环境变量”对话框。一世。单击“确定”关闭“系统属性”对话框。- 现在,使用任何方法来启动您的应用程序。Visual Studio将启动并加载应用程序
在验收测试中启动控制台应用程序时,我一直在寻找实现此目的的方法。
我今天发现了这个-https: //blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/
这是Visual Studio的一个附加组件,它可以很好地发挥作用。当我调试验收测试(我使用Resharper测试运行程序)并将断点放置在启动的应用程序中时,现在可以在同一Visual Studio实例中调试该应用程序。
“ Entrian Attach”是一个精确执行此操作的Visual Studio加载项-您告诉它可执行文件的名称,并且在进程启动时(无论启动方式如何)在运行任何代码之前,它会附加调试器。
(披露:我是作者。我建立了Attach,因为我一直都遇到这个问题!)
您还可以使用Windows调试工具附带的gflags.exe util,只需打开gflags.exe,然后转到图像文件,输入进程名称(a.exe),然后按Tab,然后在TextBox中选中debugger复选框。输入带有选项/ debugexe的vs路径(即“ C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe” / debugexe)
进程运行后,自动Visual Studio将打开,您可以添加断点并按Run。
如何操作:a.exe
在VS中打开项目,设置断点等。然后为a.exe,“调试”选项卡打开“项目属性” ,并将“命令”设置为。然后只需点击Debug即可。c.exe
不幸的是,我从未在托管项目中做到过这一点,因此在这里我可能会偏离常规。但是,这就是我要对非托管(C ++)项目执行的方式。我认为托管调试器也应该支持它。
从VS 2013 SP2开始,Microsoft提供了一个免费工具,其功能与前面提到的“ Spawned Process Catcher”相同-附加所有进程,这些进程由已在调试中的进程启动。注意:我仅使用非托管C ++对此进行了测试(这可以完美地工作)。