mrr*_*rom 5 debugging windbg sos adplus
我已将 ADPlus / cdb 设置为计算机上的默认即时调试器。当任何进程出现未处理的异常或因任何其他原因崩溃时,我希望 ADPlus 为我生成故障转储。我使用 ADPlus 配置文件来设置输出目录并运行用于将 dmp 文件推送到云的预命令。
为了进行测试以确保其有效,我编写了一个非常简单的程序,该程序会引发未处理的异常并崩溃。ADPlus 总是像预期的那样附加自身,但它只成功生成我想要的转储,大约为 15 次之一。在不更改系统上的任何内容的情况下,我连续运行崩溃的程序并得到不同的结果。
大多数时候,我从 cdb 收到以下错误:
0:000> g
^ No runnable debuggees error in 'g'
0:000>
*[EOF]*
Run Code Online (Sandbox Code Playgroud)
当它正常工作时,日志中的同一位置如下所示:
0:004> g
FirstChance_epr_Process_Shut_Down
*[More stuff after here]*
Run Code Online (Sandbox Code Playgroud)
知道为什么我会出现这种行为吗?如果有帮助的话,我可以发布我的配置文件和完整日志。何时工作日志和何时不工作日志之间的唯一区别是,所有行均以“何时0:004>工作”和“0:000>何时不工作”开头。
评论无法容纳所有这些......所以放在这里......
是的,使用 DebugDiag,您可以预先附加 VBS 脚本,并且可以在事件发生时定义自定义操作(即运行 VBS 脚本)。
我认为您需要等到 CDB 完成转储并且 CDB/您的进程已退出,然后才能尝试再次启动应用程序。(您可以在脚本中使用 tlist 来监视进程......等待它消失)。...否则带有 -PN 选项的 ADPlus 可能会使 CDB 尝试重新附加到已经崩溃的进程...但它不能这样做,因为调试器已附加。
启动 TaskManager 并查看是否出现应用程序的多个实例(如果出现,那么您可能必须使用 -p PID 选项来让 adplus 监视正确的进程...这并不理想,因为您必须这样做首先启动该进程以获得其 PID)。
还要研究 ProcDump,它使用一种称为“反射进程”的技术...它允许一种非常快速的方法来复制进程空间并让转储完成而无需等待...如果 DebugDiag 没有,这可能会有所帮助。
看看这个链接...就在底部...它显示了如何等待 CDB 完成转储(但它是一个 Powershell 脚本)。
| 归档时间: |
|
| 查看次数: |
6032 次 |
| 最近记录: |