错误检测c++

本文介绍了在C++编程中进行错误检测的步骤,包括在编译时使用-g选项增强GDB调试,通过ulimit -c unlimited设置核心转储,以及如何利用GDB解析错误信息,找出程序出错的具体位置。同时,提供了Makefile模板,强调了编译和链接阶段的注意事项,特别是库的加载顺序。
摘要由CSDN通过智能技术生成


首先,在编译程序时加-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值