【问题标题】:Inconsistent behavior from ADPlus / CDB - No Runnable Debuggees Error in 'g'ADPlus / CDB 的行为不一致 - “g”中没有可运行的 Debuggees 错误
【发布时间】:2012-08-14 18:33:35
【问题描述】:

我已将 ADPlus / cdb 设置为我机器上的默认即时调试器。当任何进程出现未处理的异常或因任何其他原因崩溃时,我希望 ADPlus 为我生成故障转储。我正在使用 ADPlus 配置文件来设置输出目录并运行用于将 dmp 文件推送到云端的预命令。

为了测试以确保它有效,我编写了一个非常简单的程序,该程序会引发未处理的异常并崩溃。 ADPlus 总是像它应该的那样附加自己,但它只成功地生成了我想要的转储,大约 15 次。在不更改系统上的任何内容的情况下,我背靠背运行崩溃的程序并获得不同的结果。

大多数时候,我从 cdb 收到以下错误:

0:000> g

       ^ No runnable debuggees error in 'g'

0:000>

*[EOF]*

当它正常工作时,日志中的相同位置如下所示:

0:004> g

FirstChance_epr_Process_Shut_Down

*[More stuff after here]*

知道为什么我会出现这种行为吗?如果有帮助,我可以发布我的配置文件和完整日志。 when-it-works 日志和 when-it-doesn't-work 日志之间的唯一区别是行都以 0:004> 开头(当它工作时)和 0:000>(当它不工作时)。

【问题讨论】:

  • 当 ADPlus 转储进程时......它应该异步执行此操作。但是,快速连续多次崩溃您的进程...可能会导致问题?...尝试跟踪成功转储之间的时间段...并查看是否存在模式,并检查 .dmp 文件的时间戳.
  • 也作为使用 ADPlus 的替代方法...尝试 DebugDiag 在发生崩溃时转储您的进程...您可能会得到更好的结果。 microsoft.com/en-us/download/details.aspx?id=26798 ... blogs.msdn.com/b/tess/archive/2009/03/20/… .... 或 ProcDump ... technet.microsoft.com/en-US/sysinternals/dd996900.aspx
  • windowsdebugging.wordpress.com/2012/03/14/… .... 您是在创建小型转储还是完整转储?
  • 时间戳似乎没有模式 - 有时我可以在几秒钟内获得转储,有时我无法在运行崩溃的应用程序的数十秒内获得转储一遍又一遍。我特别喜欢 ADPlus 的是我可以在外部配置文件中配置的前置和后置命令。 DebugDiag 有这样的东西吗?我正在生成完整的转储。

标签: debugging windbg sos adplus


【解决方案1】:

评论无法容纳所有这些...所以放在这里...

是的,使用 DebugDiag,您可以预先附加 VBS 脚本,并且您可以在事件发生时定义自定义操作(即运行 VBS 脚本)。

我认为您需要等到 CDB 完成转储并且 CDB/您的进程已退出,然后再尝试再次启动您的应用程序。 (您可以在脚本中使用 tlist 来监视进程...等到它消失)。 ...否则带有 -PN 选项的 ADPlus 可能会使 CDB 尝试重新附加到已经崩溃的进程...它不能,因为已经附加了调试器。

设置 TaskManager 并查看是否出现了应用程序的多个实例(如果出现了,那么您可能必须使用 -p PID 选项来让 adplus 监控正确的进程...不理想,因为您必须先启动该进程才能获得其 PID)。

还可以查看 ProcDump,它使用一种称为 Reflected Processes 的技术……它允许一种非常快速的方法来复制进程空间并让转储完成而不会阻塞任何东西……如果 DebugDiag 没有,这可能会有所帮助。

看看这个链接...就在底部...它显示了如何等待 CDB 完成转储(但它是一个 Powershell 脚本)。

【讨论】:

  • 目前其他事情优先于这个问题,所以我没有机会实施您的建议。我还是会继续奖励你的赏金。感谢您的回答。
【解决方案2】:

WinDbg 命令 'g' 表示 [继续]

由于您正在打开转储文件,因此无法“继续”,它只包含进程内存。

因此,在您的情况下,消息“No runnable debuggees error in 'g'”是合乎逻辑的,因为进程没有运行

关于加载正确版本的 SOS,请根据 .NET 版本使用以下命令。

.NET 4 及更高版本 .loadby sos

.NET 3.5 和 2 .loadby sos mscorwks

.NET 1.0 和 1.1 .load clr10\sos

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2017-09-29
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多