我想在生成进程(a.exe)后立即将其附加到VS,是否可以使用VS?我只知道这个过程的名称。实际上我想要完成的是在c#代码中设置一个断点,但代码属于另一个可执行文件,它将由当前运行的应用程序(c.exe)启动。代码在初始化期间,因此我无法手动执行连接。
答案 0 :(得分:66)
当我面对这种情况之前(并且我控制了两个过程),我发现一个不错的解决方法是在产生过程的入口点调用Debugger.Launch()。然后,VS将弹出一个对话框,让您附加到该过程。
答案 1 :(得分:26)
请参阅MSDN文章How to: Launch the Debugger Automatically - 这将允许人们跳过繁忙的点击确认对话框[没有关闭UAC或其他混乱]。本文列出了以下步骤:
- 启动注册表编辑器(regedit)。
- 在注册表编辑器中,打开HKEY_LOCAL_MACHINE文件夹。
- 导航到HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image文件执行选项。
- 在图像文件执行选项文件夹中,找到要调试的应用程序的名称,例如 myapp.exe 。如果你不能 找到要调试的应用程序:
一个。右键单击图像文件执行选项文件夹,然后在快捷菜单上单击新建密钥。
湾右键单击新密钥,然后在快捷菜单上单击重命名。 C。编辑应用程序名称的密钥名称;在此示例中, myapp.exe 。- 右键单击 myapp.exe 文件夹,然后在快捷菜单上单击新字符串值。
- 右键单击新字符串值,然后在快捷菜单上单击“重命名”。
- 将名称更改为调试器。
- 右键单击新字符串值,然后在快捷菜单上单击修改。将出现编辑字符串对话框。
- 在值数据框中,键入 vsjitdebugger.exe 。
- 点击确定。
- 从注册表菜单中,点击退出。
- 包含vsjitdebugger.exe的目录必须位于系统路径中。要将其添加到系统路径,请按照下列步骤操作:
一个。在经典视图中打开控制面板,然后双击系统 湾点击高级系统设置 C。在系统属性中,点击高级标签 d。在高级标签上,点击环境变量 即在环境变量对话框的系统变量下,选择路径,然后点击修改按钮。 /> F。在编辑系统变量对话框中,将目录添加到变量值框中。使用分号将其分隔 列表中的其他条目 G。点击确定关闭编辑系统变量对话框 H。单击确定以关闭环境变量对话框。 一世。单击确定以关闭系统属性对话框。- 现在,使用任何方法启动您的应用程序。 Visual Studio将启动并加载应用程序
醇>
答案 2 :(得分:8)
当我在验收测试中启动控制台应用程序时,我一直在寻找一些方法。
这是视觉工作室的一个附加组件,它是一种享受。当我调试验收测试(我使用resharper测试运行器)并在启动的应用程序中放置一个断点时,我现在可以在同一个Visual Studio实例中调试应用程序。
答案 3 :(得分:8)
另一个不错的解决方案是使用Visual Studio扩展“ReAttach”。可以找到here。
如果您的流程当前未运行,ReAttach会要求您启动它并在可用时立即将其附加。
答案 4 :(得分:5)
"Entrian Attach"是一个Visual Studio加载项,它可以完成此操作 - 您可以告诉它可执行文件的名称,并且在任何代码运行之前,它会在进程启动时附加调试器,而不管它是如何启动的。
(披露:我是作者。我建立了Attach因为我一直有这个问题!)
答案 5 :(得分:3)
如何:在VS中打开a.exe
项目,设置断点等。然后打开项目属性以获取a.exe,调试选项卡,以及将 Command 设置为c.exe
。然后点击 Debug 。
不幸的是,我从未在托管项目中做到这一点,所以我可以在这里脱颖而出。但是,这就是我将如何处理非托管(C ++)项目。我认为托管调试器也应该支持它。
答案 6 :(得分:3)
您还可以使用Windows调试工具附带的gflags.exe工具,您只需打开gflags.exe然后转到图像文件,输入进程名称(a.exe)按Tab键并检查调试器复选框,在TextBox中使用选项/ debugexe输入vs路径(即“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe”/ debugexe)
自动视觉工作室将在进程运行后打开,您可以添加断点并按“运行”。
答案 7 :(得分:0)
如果C#代码由非托管代码启动,请确保选中“非托管代码调试”@Project属性 - >调试选项..
答案 8 :(得分:0)
我非常喜欢@RichieHindle建议的Entrian Attach,但我也发现了这个类似的免费工具。它捕获调试过程启动的所有进程。
衍生过程捕手: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher
答案 9 :(得分:0)
从VS 2013 SP2开始,Microsoft提供了一个免费工具,它与之前提到的“Spawned Process Catcher”相同 - 附加所有进程,这些进程由已经在调试中的进程启动。注意:我只使用非托管C ++进行了测试(这完美无缺)。