【问题标题】:Can one Enable Post-Mortem Debugging of Non-Cygwin Application Running in a Cygwin Terminal?可以启用在 Cygwin 终端中运行的非 Cygwin 应用程序的事后调试吗?
【发布时间】:2015-09-16 09:06:41
【问题描述】:

我们有一个混合了 Cygwin 和非 Cygwin 程序的系统,所有这些程序都在 Cygwin bash 会话下运行。

其中一个非 Cygwin 可执行文件定期崩溃,我正在尝试使用 windbg as outlined here 启用事后调试。

我写了一个故意崩溃的测试程序。按照上面页面中的步骤操作后,当测试程序崩溃时,windbg 会自动打开——这正是我想要的。但是,如果我从 Cygwin 的 bash 运行测试程序,bash 会打印“分段错误”错误消息,并且 windbg 不会打开。

有没有办法让 windbg 在非 Cygwin 程序上打开,该程序是从 Cygwin bash shell 启动的,崩溃了?

P.S.:我们所有的非 Cygwin 程序都是用 MS Visual Studio 编译的 C 程序。

【问题讨论】:

    标签: c windows visual-c++ cygwin windbg


    【解决方案1】:

    Cygwin 可能正在安装一个未处理的异常过滤器,它允许它处理崩溃并因此打印“分段错误”。这可以防止即时调试器启动,因为异常确实由 Cygwin 处理。我不知道你是否可以禁用它。要获得内存转储,您可以使用 procdump 为所有 first chance 异常创建内存转储。最后的第一次机会异常内存转储很可能对应于导致 Cygwin 显示“分段错误”的那个。

    运行您的程序,然后从 Windows 命令提示符运行: procdump -e1 <PID|Process Name>

    如果您的程序在您有机会运行 procdump 之前崩溃,请先尝试使用 -w 选项运行 procdump,以便它等待您的程序启动。然后运行你的程序。

    确保用 'e' 指定 '1',否则您将不会遇到第一次机会异常。

    您可以从 Microsoft 获取 procdump: https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-04
      • 2010-09-25
      • 2014-08-03
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多