【问题标题】:Debugger not attaching to process调试器未附加到进程
【发布时间】:2014-09-16 15:19:40
【问题描述】:

我有一个正在尝试调试的 MMC 管理单元。目前,位于管理单元的构造函数中的以下代码用于将调试器附加到它:

public MySnapIn()
{
#if DEBUG
    if (!Debugger.IsAttached)
    {
        Debugger.Launch();
    }
#endif
    ...
}

但总是必须将调试器附加到 Visual Studio 真的很烦人。我想自动化这个过程。理想情况下,我只需按 F5,它就会自动附加调试器。我尝试了以下方法:

  • 项目属性->启动外部程序->输入“C:\Windows\System32\mmc.exe”
  • 项目属性 -> 命令行参数 -> 给它一个 .msc 文件的路径(存储管理单元布局,以便每次都更容易加载它,这样你就不必总是文件 ->添加/删除管理单元)。

这不起作用。调试器不会自动附加。我怎样才能使这个过程自动化,或者是什么阻止了调试器自动附加?

【问题讨论】:

  • +1 只是为了教我如何请求附加调试器 (Debugger.Launch())。我不知道这是可能的。
  • @stakx 大部分时间都有效。例如,如果你有一个 Windows 服务,或者其他类型的应用程序不应该有一个 GUI(根据软微),它不起作用:stackoverflow.com/questions/12042054/…你可能也有兴趣了解 WER 作为调试工具(为您生成故障转储;使用故障转储,您可以将它们加载到 Visual Studio 并在故障点重新连接调试器并查看所有应用程序对象的状态)。
  • @stakx WER 只需要更改注册表项 (msdn.microsoft.com/en-us/library/windows/desktop/…) 并存在 PDB 文件。您还可以从任务管理器生成转储(CTRL+SHIFT+ESC -> 右键单击​​应用程序 -> 生成转储文件)
  • WER 听起来很有趣。由于目标计算机上缺乏管理员权限,我将无法在我想(在工作中)使用它,但无论如何我会调查它。
  • @stakx 此外,有时,如果您使用 C++(本机)和 C#(托管)应用程序,当您附加调试器(调试 -> 附加到进程)时,您可能需要更改它附着的方式。 “附加到:”有一个选择...按钮,我必须启用所有这 3 个:本机、托管和托管兼容模式,以便调试一些在运行时按顺序加载/调用托管 DLL 的本机应用程序能够调试它。 Windows 中的调试支持非常出色,但文档总是那么糟糕......

标签: c# .net visual-studio debugging mmc


【解决方案1】:

刚刚收到。 As it turns out,您必须在 64 位系统上使用 32 位 MMC 启动器(我正在使用),然后将 -32 标志添加到 force it to stay in 32-bit mode 的“命令行参数”中:

  • 确保我的管理单元项目针对配置管理器中的任何 CPU。
  • 项目属性 -> 启动外部程序 -> 输入“C:\Windows\ SysWOW64 \mmc.exe”
  • 项目属性 -> 命令行参数 -> 给它一个 .msc 文件的路径,还有 -32 标志(存储管理单元布局,以便每次都更轻松地加载它时间,这样您就不必总是文件 -> 添加/删除管理单元)。

【讨论】:

  • "C:\Windows\SysWOW64\mmc.exe" 虽然名称中有 64 个标题,但该文件夹实际上是 32 位版本的程序所在的位置,因此您运行的是 32 位启动器,而不是 64 位。如果您正在运行 64 位应用程序,则 64 位版本位于 C:\Windows\System32C:\Windows\sysnative 如果您正在运行 32 位应用程序(如果您正在运行 32 位应用程序,System32 将重定向到 SysWOW64)
  • @ScottChamberlain 这太疯狂地违反直觉,但是谢谢,我会更新我的答案。
  • 如果您想了解有关此类重定向的更多信息,请参阅File System Redirector上的此 MSDN 页面
  • 如果有人关心的话,WoW64 应该是“Windows 32-bit on Windows 64-bit”的缩写:en.wikipedia.org/wiki/WoW64
猜你喜欢
  • 2019-08-12
  • 2018-09-23
  • 2019-01-31
  • 2019-04-30
  • 2014-01-09
  • 2012-01-15
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多