如何转储整个过程,提出它并开始调试

How to dump the whole procees, raise it and start debugging?

本文关键字:调试 开始 过程 何转储 转储      更新时间:2023-10-16

我有一个应用程序,它运行了很长时间,然后崩溃了。我需要调试几次才能修复它,不想每次都等一个小时才能达到发生错误的状态。

所以,我想要一些工具来在磁盘上克隆整个过程,然后将其提升,连接到它并调试。

我在(令人惊讶的)Windows上使用Visual Studio 2012/2013。

例如:

for (int i = 0; i < 10000; ++i)
{
    if (i == 9999)
        throw MyExcept();
}

我想在第9998次迭代时保存应用程序(进程)的状态,从中开始调试

UPD1:Visual Studio转储文件并不令人钦佩,因为在打开调试器(VS)后,我无法获得调试器的所有功能。例如:我无法设置断点,甚至旧的断点也不起作用。

UPD 2:此外,我需要有可能复制应用程序的此保存会话。

如果我理解正确,您需要完成两项任务:

1)在特定条件下中断执行

您需要设置一个带有条件的观察点,或者在Visual Studio中设置数据断点。看看这个问题:当变量在.NET中获取特定值时,我可以设置断点吗?

2)转储核心文件

一旦你设置了观察点,并且你的程序达到了这个点,你就可以转储一个核心文件。之后您可以继续执行。有一个关于如何转储和加载内核的官方FAQ条目。

您需要从这里进行procdump

  1. 注册为实时(AeDebug)调试器
  2. 也许您应该启用完整的本地转储
  3. 程序崩溃
  4. 从完全转储启动带有procdump的进程

但我认为在您的示例中使用DebugBreak API而不会崩溃更好。通常情况下,崩溃不会让你开始进一步的分析——只有事后分析。