c# - 使用多个引擎将 Visual Studio 2013 附加到托管和 C++ 进程

标签 c# c++ visual-studio-2013 visual-studio-debugging

我试图让 Visual Studio 2013 以编程方式将调试器附加到子进程,我开始使用 Process.Start 方法。

Process.Start(ProcessStartupInformation startupInfo)

var subProcess = Process.Start(startInfo);

// TODO: how to find the right VS instance?
var dte2 = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.12.0");
var debugger2 = (EnvDTE80.Debugger2)dte2.Debugger;
Process2 processToAttachTo = null;
if (debugger2.LocalProcesses != null)
{
    foreach (Process2 proc in debugger2.LocalProcesses)
    {
        if (proc.ProcessID == subProcess.Id)
        {
            processToAttachTo = proc;
        }
    }
 }

 if (processToAttachTo != null)
 {
      var trans = debugger2.Transports.Item("Default");
      var engine1 = trans.Engines.Item("Managed (v4.5, v4.0)");
      var engine2 = trans.Engines.Item("Native");
      var engines = new[] { engine1, engine2 };

      processToAttachTo.Attach2(engines);
  }

不幸的是,这似乎会使调试器崩溃。但是,如果我只使用其中一个引擎

      processToAttachTo.Attach2(engine1);

      processToAttachTo.Attach2(engine2);

一切正常。

在那种情况下,我只能调试我的 C++ 子进程或我的 C# 子进程。但不是两者。

如果我尝试获取 processToAttachTo.Transport.Engines 并像这样使用 processToAttachTo.Attach2(processToAttachTo.Transport.Engines) 调试器也会崩溃,我得到在 通话被被叫方拒绝。 (来自 HRESULT 的异常:0x80010001 (RPC_E_CALL_REJECTED)) 异常。

问题:

  1. 如何使用多个引擎来附加调试器?
  2. 如果无法附加多个引擎,我如何确定应该附加哪个引擎?

相关问题:

更多信息:

http://msdn.microsoft.com/en-us/library/ms228772(v=vs.120).aspx

最佳答案

string[] 适合我(VS 2017):

processToAttachTo.Attach2(new string[] {"Managed (v4.5, v4.0)", "Native"});

关于c# - 使用多个引擎将 Visual Studio 2013 附加到托管和 C++ 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21140303/

相关文章:

visual-studio-2013 - Visual Studio 2013 网站项目 - 在配置管理器中更改配置

c# - 如何使用自定义 MembershipProvider?

C# 内部访问修饰符

c# - FILESTREAM - 使用 SQLFileStream 读取存储在文件系统中的文档

c# - 检测滑动手势方向

Windows 上的 C++ : Using DirectInput without a window?

c++ - 如何处理与字段名同名的参数?

c# - WPF Visual Studio 设计器中的错误

c++ - void* 有合法用途吗?

c# - 如何在 .csproj 的 StartProgram 设置中指定命令行参数?