我的程序是用C++编写的.用gcc编译,使用-g3 -O0 -ggdb标志.当它崩溃时,我想打开它的核心转储.它是创建核心转储文件,还是我需要在程序本身或执行它的计算机上执行某些操作以启用核心转储?创建此文件的位置,名称是什么?
我是新手,所以可能会遗漏一些基本的东西.我使用gcc 4.8(MinGW)和-g选项编译我的C程序.
然后我运行它并使用Very Sleepy捕获它.这一切都有效,但Sleepy的输出看起来像这样:
memcpy 0.98 0.98 7.65 7.65 msvcrt unknown 0
[00000000004038FE] 0.77 0.77 6.02 6.02 a 0
memset 0.63 0.63 4.92 4.93 msvcrt unknown 0
[0000000000404549] 0.42 0.42 3.29 3.29 a 0
[000000000040282A] 0.35 0.35 2.73 2.73 a 0
[0000000000404600] 0.25 0.25 1.99 1.99 a 0
....
etc.
Run Code Online (Sandbox Code Playgroud)
(我的应用程序叫做a.exe)
所以Sleepy看不到函数名,我怎么需要编译/运行才能使它工作?困倦的网站给出:
支持GCC/mingw.您现在可以使用嵌入的DWARF2数据分析可执行文件,它应该可以工作.此处不需要特殊选项,只需使用"-g"进行编译即可确保符号存在.您可能还希望使用"-fno-omit-frame-pointer"来确保正确的callstack,尽管Sleepy通常可以以任何方式工作.您不需要使用"-pg"或任何垃圾.它甚至可以在Microsoft DLL之间将正确的堆栈转换为GCC堆栈,这比你想象的要难.
但就我而言,这还不够.