【问题标题】:How to debug a program when it crashes w/out exception?程序崩溃时如何调试程序没有异常?
【发布时间】:2010-09-25 04:09:04
【问题描述】:

我的一个程序定期崩溃,但我不知道为什么。我在调试模式下运行它,但没有弹出任何内容。程序突然退出。我还有其他确实会引发异常的错误......但不是这个。有什么神奇的方法可以捕捉到它吗?

【问题讨论】:

    标签: c# visual-studio debugging


    【解决方案1】:

    假设您是从 Visual Studio 中运行它,并且由于某种原因它没有在调试器中停止并出现未捕获的异常,在这种情况下,您可以尝试从 Visual Studio 外部捕获崩溃。请参阅我在System.AccessViolationException from unmanaged code? 的回答,尤其是how to capture a crash dump

    如果它只是周期性地崩溃,但在相当短的时间内,请从 Sysinternals procdump 开始。从 Visual Studio 外部启动可执行文件,然后运行:

    procdump -e <YourExecutableNameOrPid>
    

    并等待它收集故障转储 - 假设它由于未处理的异常而退出 - 然后将故障转储加载到 VS 2010 或 WinDbg。

    【讨论】:

    • 如果 .NET 4 应用程序中的 AccessViolationException 实际上意外地遇到了 catch 块,您会怎么做?是的,这真的发生在我身上。我自己都不敢相信。计划问一个单独的 StackOverflow 问题,但我先阅读了这个答案。因为应用程序没有崩溃,所以没有崩溃转储,对吧?
    • @JohnZabroski 我会回退到使用 WinDbg 和 SOS[EX] 进行调试。请参阅上面链接的我的其他答案。
    • 谢谢,我在这里详细描述了我的问题:stackoverflow.com/questions/39378849/…
    【解决方案2】:

    程序突然退出

    一定要检查您的代码或您使用的其中一个库是否没有调用 exit()(是的,这听起来可能太简单了,但我们曾经浪费了几个小时来跟踪随机程序关闭回到 exit() 调用..)。如果是这样,在此处放置一个断点或更改为 throw(),然后再次运行。如果不是,肖恩的回答似乎是合法的。

    【讨论】:

    • 我们曾经遇到过这个确切的问题,我们花了很长时间才弄清楚。值得一试。
    • 你还应该在 main() / winmain() 的最后一行设置一个断点或一些日志语句。程序可能会以一种意想不到的方式“正常”终止。
    • @Red:这是一个 WPF GUI 应用程序...所有代码都在事件中,我认为它不应该结束。 @stijn:很确定我没有写任何退出调用,但我会仔细检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多