博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc / g++ Debug 模式
阅读量:4035 次
发布时间:2019-05-24

本文共 1268 字,大约阅读时间需要 4 分钟。

Debug / release模式

  Debug模式下的代码比release模式具有更多的检测,比如在windows平台上assert宏只在release模式下有效。Linux上则没有这个限制,无论Debug还是release模式assert都生效,但是如果你想让assert失效,编译的时候 加上 -DNDEBUG 即可。

Debug检测

  我们都说了Debug模式可以帮我们检测一些东西,但是可能会有额外的性能开销(虽然微不足道)。默认下Linux的动态库文件是集于Debug 和 release于一身的。看看这个列子

#include
using namespace std;int main(){ vector
v; v.reserve(10); //容量为10 但是size 为0 v[3] = 1; return 0;}

  下面这份代码在windows 下的Debug模式下会崩溃,release模式下不会崩溃,这是因为windows下的vector对operator[] 做了assert的检测。那么我们跑这份代码在Linux下,它并不会报错,所以那我们如何开启真真的Debug 模式呢?

GCC 的 Debug模式

_GLIBCXX_DEBUG

  如果我们想开启Debug模式必须定义上面的宏

debug模式下的容器

  gcc是有专门的debug容器的,这些容器使用起来和标准容器一模一样,所以放心使用就好,但是有个准则就是俩个不同的.o文件内不能一个使用了debug模式的容器,一个没使用debug模式下的容器,这俩个.o文件是不能链接到一起的。

非c++11的

这里写图片描述

c++11的Debug容器

这里写图片描述

demo
1 #include
2 #define _GLIBCXX_DEBUG 3 4 int main() 5 { 6 __gnu_debug::vector
v; 7 v.reserve(10); 8 v[3]=1; 9 return 0; 10 }[yutian@~]$ ./a.out /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/debug/vector:265: error: attempt to subscript container with out-of-bounds index 3, but container only holds 0 elements.Objects involved in the operation:sequence "this" @ 0x0x7ffeae481db0 { type = NSt7__debug6vectorIiSaIiEEE;}Aborted (core dumped)
你可能感兴趣的文章
python一句话之利用文件对话框获取文件路径
查看>>
PaperDownloader——文献命名6起来
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
Java的对象驻留
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>