文章目录
一、Debug和Release1.1Debug版本
在软件开发过程中可以使用Debug版本软件进行调试,调试版本中包含好多调试信息,便于发觉问题,假若出现问题打印linux发行版本程序,Debug版本软件所提供的调试信息可以帮助我们以最快的速率解决问题。
1.2Release版本
当软件开发完成后,我们为了降低程序运行效率,此时会编译一个Release版本的程序,上面不包含调试信息,一旦出现问题然后我们想要对其进行调试,就没有这么容易了。
1.3区别
下边是Release版本查看栈回溯的信息,因为没有符号信息,在输出的时侯只复印了地址,难以直观的看见函数调用位置。
除据悉,还包含优化等级的差别打印linux发行版本程序linux deepin,将同样的程序编译成汇编代码以后还会彰显下来,每一条汇编指令就对应了一条CPU指令,CPU依照对应的指令进行执行。
Debug模式下可以使用断定,并且在Release模式下断定无效,当条件不满足的时侯继续往下执行。
在经过优化后,编译器可能会直接从寄存器中取值,而不从显存中进行取值。
在嵌入式系统中储存容量有限,调试版本可能难以保存到储存器中进行运行,下边是她们的对比:
-rwxrwxr-x 1 lhq lhq 83568 11月 20 15:15 debug
drwxrwxr-x 18 lhq lhq 4096 11月 18 17:47 EOS
-rw-rw-r-- 1 lhq lhq 632 11月 19 22:41 main.cpp
-rwxrwxr-x 1 lhq lhq 25936 11月 20 15:14 release
从里面的对比来看linux系统镜像下载,对程序进行优化后发布运行是十分有必要的。
二、使用GDB调试Release版本程序
使用版本控制工具进行管理代码,每次发布一个版本在出问题以后都可以及时通过源码剖析问题。
因为在Release版本中不包含调试信息,所以调试上去难度比较大,而且我们可以使用发行版本的源码生成一个携带调试信息的版本来进行调试。
第一种方法是从调试版本软件中提取符号表,借助Binutils工具获取符号表:
objcopy --only-keep-debug debug debug.symbol
获取到符号表后使用gdb指定符号文件:
gdb --symbol=debug.symbol -exec=release
加载成功以后就可以像debug版本一样设置断点和查看局部变量信息。
第二种方法是直接指定从调试版本中获取符号:
gdb --symbol=debug -exec=release
之后就可以像Debug版本一样使用了