1.在Linux下的警告和错误,当程序出现bug时,linux终端会给大家两种不同的信息
警告(warning):有时的警告是不影响可执行程序的产生
错误(error):错误如果不改正是不能生成可执行文件的
g++编译器比gcc编译器更加严格,警告可以被忽略,继续产生可执行程序,但是错误必须更改后才能产生可执行文件
2.什么是GDB:https://sourceware.org/gdb/
GDB:GNU项目调试器,允许查看一个程序执行时“内部发生了什么”
3.GDB是干啥的
主要干四件事:
- 启动程序,指定可能影响其行为的任何内容。
- 使程序在指定条件下停止。
- 检查程序停止时发生了什么。
- 更改程序中的内容,以便进行试验 纠正一个 bug 的影响,然后继续了解另一个 bug。
4.GDB如何使用
1)准备C++程序
2)编译程序,编译选项中需要加上-g
g++ -g ***.cpp -o **(如果不加-o会生成一个a.out可执行文件)(g++ -g 02demo.cpp)
3)启动gdb调试
gdb ./***(gdb ./a.out)
4)gdb常用指令:
quit(q):表示退出gdb指令
run(r):表示执行可执行程序,如果没有设置断点,则将整个程序从头到尾执行一遍
list(l):展示可执行程序的相关信息,默认展示10行
如果想展示指定行,或者指定函数。l 8,10(展示8-10行)。。l main(展示main周围)
break(b):设置断点。
b+行号:表示在某行设置断点,当调试器运行到断点所在的位置后,会暂停于此
b+函数名:表示在指定的函数处设置断点
next(n):设置断点后,执行下一条语句
continue(c):表示从断点处,继续往后执行,直到遇到下一个断点,或者程序结束
info break:查看断点的相关信息
delete breakpoint+断点编号:表示删除指定的断点
step(s):进入断点所在函数内部继续执行
print(p)+变量名或地址:表示打印指定变量或地址信息
set variable 变量名=值:表示给某个变量设置相关的值
5)gdb使用小技巧
shell:后面可以跟终端指令,表示执行终端相关操作
set logging on:设置开启日志功能,会在当前目录中生成一个gdb.txt文件记录接下来的调试内容
watchpoint:观察点,如果设置的观察点的值改变,则会将该值的旧值与新值全都展示· 6)gdb调试出错文件
当一个可执行程序出错时,会产生一个core文件,用于查看相关错误信息
Linux系统默认是不产生core文件,需要进行相关设置后才能产生
通过ulimit -a查看所有Linux的限制内容 通过ulimit -c unlimited来设置core文件的个数
查看出错原因
7)gdb调试其他正在运行的进程
./可执行程序 & :表示将可执行程序后台运行,不占用当前终端