代码之家  ›  专栏  ›  技术社区  ›  avd

中止的核心转储C++

  •  1
  • avd  · 技术社区  · 16 年前

    我有一个很大的C++函数,它使用OpenCV库,在CygWin G++编译器上运行在Windows上。最后,它给出了aborted(core dumped),但函数在此之前完全运行。我还尝试将print语句放在函数的末尾。也会被打印出来。所以我认为代码中没有逻辑错误会产生错误。

    请解释一下。

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

    此外,该文件是一个大型项目的一部分,所以我不能张贴代码也。

    GDB结果:

    Program received signal SIGABRT, Aborted.
    0x7c90e514 in ntdll!LdrAccessResource () from /c/WINDOWS/system32/ntdll.dll
    
    4 回复  |  直到 16 年前
        1
  •  2
  •   Rudi    16 年前

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

        2
  •  0
  •   Michael Ulm    16 年前

    你没给我们多少钱。但是,这看起来像是您在释放资源时遇到了一些问题。可能是一堆烂摊子。你有没有试过在gdb下运行它,然后查看它崩溃的地方?另外,检查所有新的/删除调用是否匹配。

        3
  •  0
  •   jopa    16 年前

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

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

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

        4
  •  0
  •   Alex Budovski    16 年前

    把它穿过去 AppVerifier 和 cdb .

    例如。

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