中止核心转储C ++

时间:2010-04-28 12:04:41

标签: c++ cygwin

我有一个大型的C ++函数,它使用OpenCV库并在Windows上运行cygwin g ++编译器。最后它给出了Aborted(核心转储)但该函数在此之前完全运行。我还尝试将print语句放在函数的末尾。那也印刷了。所以我认为代码中没有逻辑错误会产生错误。

请解释一下。

我也在使用assert语句。但是中止错误不是由于assert语句引起的。它并没有说断言失败了。它只是在没有任何消息的情况下结束。

此外,该文件是大型项目的一部分,因此我也无法发布代码。

gdb结果:

Program received signal SIGABRT, Aborted.
0x7c90e514 in ntdll!LdrAccessResource () from /c/WINDOWS/system32/ntdll.dll

4 个答案:

答案 0 :(得分:2)

它看起来像是内存错误(写入释放内存,双重释放,堆栈溢出......)。当代码可以在Linux下编译和运行时,您可以使用valgrind来查看是否存在内存问题。此外,您可以尝试禁用部分应用程序,直到问题消失,以获得错误发生的线索。但是这种方法也会产生误报,因为与内存相关的错误会导致模块失败而不是导致错误的原因。您也可以在gdb中运行该程序。但是这里调试器指向的位置可能不是错误发生的位置。

答案 1 :(得分:0)

你没有给我们太多的帮助。但是,这似乎在释放资源时遇到了一些问题。也许堆腐败。您是否尝试在gdb下运行它,然后查看它崩溃的位置?另外,请检查所有新/删除呼叫是否匹配。

答案 2 :(得分:0)

将核心转储与二进制文件一起加载到gdb中,以便了解问题列表的位置。命令行是:

gdb <path to the binary> <path to the core file>

有关gdb的更多详细信息,请参阅GDB: The GNU Project Debugger

答案 3 :(得分:0)

通过AppVerifiercdb运行。

E.g。

cdb -xd sov -xd av -xd ch <program> <args>