如何停止Visual Studio调试器在作业对象中启动我的进程?

时间:2008-09-18 03:38:40

标签: visual-studio visual-studio-2005 debugging

当我从Visual Studio启动我的进程时,它总是在作业对象中创建。我想知道如何关闭此行为。有什么想法吗?

我希望它是在要调试的作业对象中创建的。我想将我的程序放在不同的工作对象中。

这不是托管流程。我在谈论Job Object。这是一个非托管的C ++应用程序。

3 个答案:

答案 0 :(得分:23)

devenv.exeVSLauncher.exe在兼容模式下运行时会发生这种情况。 Program Compatibility Assistant(PCA)将作业对象附加到Visual Studio进程,并且每个子进程都继承它。检查作业名称(由Process Explorer报告)是否以 PCA 开头。如果是这样,可以按照链接中的描述禁用PCA。

您可以使用Run - >全局禁用PCA gpedit.msc - > Administrative Templates\Windows Components\Application Compatibility - > Turn off Program Compatibility Assistant - > Enable

您可以通过添加注册表项来禁用特定可执行文件的PCA。对于Windows 7,相应的注册表项为HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant。在注册表中,右键单击该键,选择New - > Multi-String Value,将其命名为ExecutablesToExclude。将值设置为denenv.exeVSLauncher.exe的完整路径,在不同的行上,不带引号。对我来说,这些是:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe

Windows 7上的一个相关问题是,您在Visual Studio中构建并从资源管理器(不是Visual Studio或命令行)运行的可执行文件可以在兼容模式下运行,并再次获取包围它们的作业对象。为了防止这种情况,您的可执行文件需要一个使用新Application Manifest Compability section声明与Windows 7兼容的清单。该链接提供了Windows 7兼容清单的示例。 Visual Studio 2010提供的默认清单不包括此兼容性部分。

答案 1 :(得分:1)

我不知道有什么方法可以控制由VS.NET调试产生的进程的这个方面。但是有一种解决方法,适用于VS.NET无法或不能以您想要的方式启动流程的任何情况:

启动您的进程(可能使用作为构建后事件的一部分运行的包装器EXE),然后使用Tools / Attach to Process附加到新启动的进程。如果你作为启动代码的一部分进入调试器,甚至不需要这个(并且你也可以调试启动问题......)。

答案 2 :(得分:1)

我无法重现你所看到的。我在VS 2005和VS 2008中创建了一个非托管C ++应用程序,在VS中启动该进程时,我将该进程与新作业对象相关联没有问题。

您确定调试器正在执行此操作吗?