我想在进程(a.exe)生成时立即附加,使用VS能做到吗?我只知道进程的名称。实际上,我想要实现的是在C#代码中设置断点,但该代码属于另一个可执行文件,该可执行文件将由当前运行的应用程序(c.exe)启动。 该代码位于初始化期间,因此我无法手动附加。
我想在进程(a.exe)生成时立即附加,使用VS能做到吗?我只知道进程的名称。实际上,我想要实现的是在C#代码中设置断点,但该代码属于另一个可执行文件,该可执行文件将由当前运行的应用程序(c.exe)启动。 该代码位于初始化期间,因此我无法手动附加。
当我之前遇到过这种情况(并且我控制着两个进程时),我发现一个不错的解决方法是在生成进程的入口点中放置对Debugger.Launch()的调用。然后VS将弹出一个对话框,让你附加到该进程。
- 启动注册表编辑器(regedit)。
- 在注册表编辑器中,打开
HKEY_LOCAL_MACHINE
文件夹。- 导航到
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
。- 在Image File Execution Options文件夹中,找到您想要调试的应用程序的名称,例如myapp.exe。如果您找不到要调试的应用程序:
a. 右键单击Image File Execution Options文件夹,在快捷菜单上单击New Key。
b. 右键单击新建的键,在快捷菜单上单击Rename。 c. 编辑键名为您的应用程序名称;在此示例中为myapp.exe。- 右键单击myapp.exe文件夹,在快捷菜单上单击New String Value。
- 右键单击新字符串值,在快捷菜单上单击Rename。
- 将名称更改为debugger。
- 右键单击新字符串值,在快捷菜单上单击Modify。出现Edit String对话框。
- 在Value data框中,键入vsjitdebugger.exe。
- 单击OK。
- 从Registry菜单中,单击Exit。
- 包含vsjitdebugger.exe的目录必须在您的系统路径中。要将其添加到系统路径,请执行以下步骤:
a. 在经典视图中打开控制面板,双击系统。
b. 单击高级系统设置。
c. 在系统属性中,单击高级选项卡。
d. 在高级选项卡上,单击环境变量。
e. 在环境变量对话框中,在系统变量下,选择Path,然后单击Edit按钮。
f. 在编辑系统变量对话框中,将目录添加到变量值框中。使用分号将其与列表中的其他条目分隔开。
g. 单击确定以关闭编辑系统变量对话框。
h. 单击确定以关闭环境变量对话框。 i. 单击确定以关闭系统属性对话框。- 现在,使用任何方法启动您的应用程序。Visual Studio将启动并加载应用程序。
另一个不错的解决方案是使用Visual Studio扩展程序“ReAttach”,可在此处找到。
如果您的进程当前未运行,ReAttach将在其变为可用时要求您启动并附加到它。
该强大工具需要本地调试器。这意味着如果您正在调试.NET代码,您必须选择启用混合模式调试。
- Natana.exe
项目,设置断点等。然后打开a.exe的项目属性,切换到调试选项卡,并将命令设置为c.exe
。最后点击调试即可。我非常喜欢@RichieHindle建议的Entrian Attach,但我也发现了一个类似的免费工具。它可以捕获由调试进程启动的所有进程。
生成的进程捕获器: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher