如何转储整个过程,提出它并开始调试
How to dump the whole procees, raise it and start debugging?
我有一个应用程序,它运行了很长时间,然后崩溃了。我需要调试几次才能修复它,不想每次都等一个小时才能达到发生错误的状态。
所以,我想要一些工具来在磁盘上克隆整个过程,然后将其提升,连接到它并调试。
我在(令人惊讶的)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
- 注册为实时(AeDebug)调试器
- 也许您应该启用完整的本地转储
- 程序崩溃
- 从完全转储启动带有procdump的进程
但我认为在您的示例中使用DebugBreak API而不会崩溃更好。通常情况下,崩溃不会让你开始进一步的分析——只有事后分析。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 如何在C++生成器中禁用"使用调试.dcus"
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 如何从头开始创建 avi 文件?
- 调试 CUDA MMU 故障
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 如何在调试中通过传递引用开始
- 为什么C++向量大小从 4294967296 开始,而调试器将其读取为 0?
- 当我在C++中开始调试时,Visual Studio 2015会冻结
- 如何转储整个过程,提出它并开始调试
- Visual Studio 2008开始调试变更相关的可执行文件
- 如何在VS2015中开始调试之前运行一个脚本可执行文件