gpt4 book ai didi

debugging - 如何设置 AeDebug 以获取带有进程名称的小型转储?

转载 作者:行者123 更新时间:2023-12-01 22:57:09 25 4
gpt4 key购买 nike

我必须对 C++ 项目执行一些事后调试。已知的执行方法是将 cdb 调试器设置为小型转储生成器,然后处理转储收集。我几乎阅读了整个网络,但没有找到生成带有崩溃进程名称的小型转储的解决方案

有没有办法设置 AeDebug\Debugger 注册表变量,使 cdb 生成一个带有进程名称的转储文件?当我将对 cdb.exe 的调用封装在一个批处理文件中时,它启动良好但在符号搜索时一直处于阻塞状态。我必须执行 Ctrl+C 以停止批处理,然后创建具有正确进程名称的小型转储...但当然我不能在无人值守的生产环境中设置这样的东西...

以前有人这样做过吗?

最佳答案

it starts well but stays blocked on the symbol searching.

它在寻找什么?您可以执行“!sym noisy”以打开有关符号加载的嘈杂输出。不过,它不应该永远阻塞——它最终应该超时。如果您修复符号路径,那也会有所帮助。您可以将符号路径设置为空,这样就不可能阻止从任何地方加载符号。

关于使用进程名称生成转储,我的一位同事 (Jeremy) 在 cdb/ntsd 命令行上建议:

-c ".foreach( obj { lm 1m a @$exentry; } ) { .dump /m /u ${obj}.dmp;.dump /ma /u ${obj}.dmp; }; q"

他还说“确保你使用@$exentry 而不仅仅是$exentry,否则它会尝试符号解析并破坏你的for 循环。”

但更简单的方法可能是使用 Windows 错误报告 (WER) LocalDumps 功能:

http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

不是带有进程名称的转储文件,而是有一个包含进程名称的目录,其中包含转储文件,这可能会满足您的需要。要获得转储中的最大信息,请将 DumpType 设置为 0,并将 CustomDumpFlags 设置为 0x1B65。

请注意,此功能纯粹用于配置本地转储:“这些转储的配置和控制独立于 WER 基础结构的其余部分。即使 WER 是禁用或用户取消 WER 报告。本地转储可能与发送到 Microsoft 的转储不同。”

另请注意,LocalDumps 不支持托管进程。

关于debugging - 如何设置 AeDebug 以获取带有进程名称的小型转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com