gpt4 book ai didi

crash-dumps - 当我的应用程序锁定在客户的机器上时的崩溃报告看门狗

转载 作者:行者123 更新时间:2023-12-04 23:11:10 25 4
gpt4 key购买 nike

我正在使用一个有点不可靠的(Qt/windows)应用程序,它部分是由第三方为我们编写的(只是想把责任推到那里)。他们的最新版本更稳定。有点。我们收到的崩溃报告越来越少,但我们收到了很多关于它只是挂起而永远不会回来的报告。情况是多种多样的,由于我们可以收集到的信息很少,我们无法重现问题。

所以理想情况下,我想创建某种看门狗,它注意到应用程序已锁定,并提供向我们发送崩溃报告。好主意,但有问题:

  • 看门狗怎么知道进程挂了?大概我们检测应用程序以定期对看门狗说“一切正常”,但是我们把它放在哪里,以保证它足够频繁地发生,但不太可能在应用程序结束时的代码路径上锁定。
  • 当发生崩溃时,看门狗应该报告什么信息? Windows 有一个不错的调试 api,所以我相信所有有趣的数据都可以访问,但我不确定什么对跟踪问题有用。
  • 最佳答案

    您需要小型转储的组合(如果您不想添加自己的小型转储生成代码,请使用 DrWatson 创建这些)和 userdump 以在挂起时触发小型转储创建。

    自动检测挂起的事情是很难确定什么时候挂起,什么时候它只是缓慢或被 IO 等待阻塞。我个人更喜欢允许用户在他们认为应用程序挂起时故意使应用程序崩溃。除了更容易(我的应用程序不会经常挂起,如果有的话:)),它还可以帮助他们“成为解决方案的一部分”。他们喜欢那样。

    首先,查看经典bugslayer article关于崩溃转储和符号,其中也有一些关于这些事情正在发生的事情的极好信息。

    二、获取userdump它允许您创建转储,以及 instructions用于设置它以生成转储

    获得转储后,在 WinDBG 中打开它,您将能够检查整个程序状态 - 包括线程和调用堆栈、寄存器、内存和函数参数。我想你会对在 Windbg 中使用“~*kp”命令来获取每个线程的调用堆栈和“!locks”命令来显示所有锁定对象特别感兴趣。我认为您会发现挂起将是由于同步对象的死锁,这将很难追踪,因为所有线程都倾向于等待 WaitForSingleObject 调用,但进一步向下查看调用堆栈以查看应用程序线程(而不是而不是像后台通知和网络例程这样的“框架”线程)。缩小范围后,您可以查看正在发出的调用,可能会向应用程序添加一些日志记录工具,以尝试为您提供更多信息,以备下次失败时使用。

    祝你好运。

    附言。快速谷歌让我想起了这一点:Debugging deadlocks . (CDB 相当于windbg 的命令行)

    关于crash-dumps - 当我的应用程序锁定在客户的机器上时的崩溃报告看门狗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/755847/

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