首先,在编译程序时加-g选项,提高gdb调试功能
然后输入指令:ulimit -c unlimited
然后运行程序,
可以通过下面的方法查看是哪行出错:
gdb exe(程序的名字) ./core.4537(错误生成的文件,可以显示栈调用的层次)
gdb ./core.4537
where
会出现以下消息:
#0 0x00002b2c6dd57215 in raise () from /lib64/libc.so.6
#1 0x00002b2c6dd58cc0 in abort () from /lib64/libc.so.6
#2 0x00002b2c6d653c44 in __gnu_cxx::__verbose_terminate_handler () from /usr/lib64/libstdc++.so.6
#3 0x00002b2c6d651db6 in ?? () from /usr/lib64/libstdc++.so.6
#4 0x00002b2c6d651de3 in std::terminate () from /usr/lib64/libstdc++.so.6
#5 0x00002b2c6d651eca in __cxa_throw () from /usr/lib64/libstdc++.so.6
#6 0x00002b2c6d5eeaa7 in std::__throw_out_of_range () from /usr/lib64/libstdc++.so.6
#7 0x0000000000440420 in std::vector<Hyp*, std::allocator<Hyp*> >::_M_range_check (this=0xb0536390, __n=0)
at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:503
#8 0x000000000044043f in std::vector<Hyp*, std::allocator<Hyp*> >::at (this=0xb0536390, __n=0)
at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:521
#9 0x0000000000449212 in Decoder (this=0x7fff3d730640, plat=@0x7fff3d730680, rules=@0x7fff3d730750, pfou=0x7fff3d730920,
result=@0x7fff3d7306f0, _oovmap=0xb0534c70) at Decoder.h:178
#10 0x000000000041a28d in xsd::ttlat (this=0x7fff3d730bf0, transio=@0x7fff3d730b20) at xsd.cc:388
#11 0x00000000004045c5 in main (argc=3, argv=0x7fff3d730d28) at main.cc:29
从最后往上看,到#9出错,然后:
frame 9
输入l 可以查看代码
输入p可以查看变量
附加一个makefile文件的通用模板含(gdb)
# Executable
EXE = chivalry