Visual Studio:在生成进程时自动附加到进程

时间:2009-12-23 07:01:29

标签: c# visual-studio debugging

我想在生成进程(a.exe)后立即将其附加到VS,是否可以使用VS?我只知道这个过程的名称。实际上我想要完成的是在c#代码中设置一个断点,但代码属于另一个可执行文件,它将由当前运行的应用程序(c.exe)启动。代码在初始化期间,因此我无法手动执行连接。

10 个答案:

答案 0 :(得分:66)

当我面对这种情况之前(并且我控制了两个过程),我发现一个不错的解决方法是在产生过程的入口点调用Debugger.Launch()。然后,VS将弹出一个对话框,让您附加到该过程。

答案 1 :(得分:26)

请参阅MSDN文章How to: Launch the Debugger Automatically - 这将允许人们跳过繁忙的点击确认对话框[没有关闭UAC或其他混乱]。本文列出了以下步骤:

  
      
  1. 启动注册表编辑器(regedit)。
  2.   
  3. 在注册表编辑器中,打开HKEY_LOCAL_MACHINE文件夹。
  4.   
  5. 导航到HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image文件执行选项。
  6.   
  7. 图像文件执行选项文件夹中,找到要调试的应用程序的名称,例如 myapp.exe 。如果你不能   找到要调试的应用程序:
      一个。右键单击图像文件执行选项文件夹,然后在快捷菜单上单击新建密钥
      湾右键单击新密钥,然后在快捷菜单上单击重命名。   C。编辑应用程序名称的密钥名称;在此示例中, myapp.exe
  8.   
  9. 右键单击 myapp.exe 文件夹,然后在快捷菜单上单击新字符串值
  10.   
  11. 右键单击新字符串值,然后在快捷菜单上单击“重命名”。
  12.   
  13. 将名称更改为调试器。
  14.   
  15. 右键单击新字符串值,然后在快捷菜单上单击修改。将出现编辑字符串对话框。
  16.   
  17. 值数据框中,键入 vsjitdebugger.exe
  18.   
  19. 点击确定
  20.   
  21. 注册表菜单中,点击退出
  22.   
  23. 包含vsjitdebugger.exe的目录必须位于系统路径中。要将其添加到系统路径,请按照下列步骤操作:
      一个。在经典视图中打开控制面板,然后双击系统   湾点击高级系统设置   C。在系统属性中,点击高级标签   d。在高级标签上,点击环境变量   即在环境变量对话框的系统变量下,选择路径,然后点击修改按钮。 />   F。在编辑系统变量对话框中,将目录添加到变量值框中。使用分号将其分隔   列表中的其他条目   G。点击确定关闭编辑系统变量对话框   H。单击确定以关闭环境变量对话框。   一世。单击确定以关闭系统属性对话框。
  24.   
  25. 现在,使用任何方法启动您的应用程序。 Visual Studio将启动并加载应用程序
  26.   

答案 2 :(得分:8)

当我在验收测试中启动控制台应用程序时,我一直在寻找一些方法。

我今天发现了这一点 - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/

这是视觉工作室的一个附加组件,它是一种享受。当我调试验收测试(我使用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 ++进行了测试(这完美无缺)。

Microsoft Child Process Debugging Power Tool

MSDN Blog entry

相关问题