需要堆栈跟踪,但是Cygwin甚至无法打印核心转储文件。

6
我有一个程序在Windows 7的Cygwin上运行时总是导致分段错误。虽然不是我的程序,但我需要帮助,开发人员要求我提供至少一个堆栈跟踪。 我的Cygwin变量看起来像这样:error_start=c:/cygwin/bin/dumper.exe。在执行程序之前,我还要运行以下命令:ulimit -c unlimited。这是我通过谷歌(包括这个问题)找到的唯一两个要求,可以在分段错误后从Cygwin获取某些信息。
但是,当我运行这个程序时,它会打印消息Segmentation fault,并没有打印出a.exe.stackdump或任何其他转储文件,也没有启动dumper实用程序。你有什么建议来获取所需的信息吗?

它必须被编译以转储核心文件(例如,make CDEBUGFLAGS=-g ...)。如果您没有获得核心文件,则检查您的限制并确保您的 coredumpsize 不设置为零(例如,limit)。您可以通过执行 limit coredumpsize unlimited 将您的核心转储大小设置为无限。 - user195488
你知道如果我使用Visual Studio编译它该怎么设置吗? - Nate Glenn
如果是Windows应用程序,请阅读以下内容:https://dev59.com/Cm445IYBdhLWcg3w1tqi否则,我不知道如何在Visual Studio中实现。 - user195488
1个回答

4
与Unix不同,在Windows上,核心转储不是“免费”的;即使您可以获得它们,在Unix上那样利用它们并不容易。Cygwin无法解决这些基本的平台差异。简单的事实是,在Windows上调试走了不同的路线:集成开发环境(IDE)、交互式调试器等。我不会继续尝试将您熟悉的方块钉入圆孔中。
除了安装Visual Studio并在其调试器下运行程序之外,最简单的获取有用信息的方法可能是安装WinDbg,在其中运行程序,然后在崩溃时输入!heap -p -a UserAddr。堆栈回溯应该在输出中的某个地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接