gcc,g++区别
误区:gcc编译c语言,g++编译c++
区别1:gcc编译c++代码需要加-lstdc++,gcc默认只链接c库,并不会链接c++库,需要手工指定
g++默认链接c库和c++标准库
区别2:gcc如果编译c语言文件,用c语言方式编译,编译c++用c++方式编译,g++不管编译c还是c++都用c++标方式编译
可执行文件的两种版本
1.debug版本,调试版本,编译阶段会加入某些调试信息
编译时,加入-g选项,可生成debug版本
2.release版本,发行版本,没有调试信息
gcc默认生成release版本
调试方法:
gdb debug版本可执行文件
显示源码:l(list)(默认显示main函数所在文件的源码)
list filename:行号
断点管理:
添加断点:1.b 行号 给指定行添加断点
2.b 函数名 给指定函数实现第一行添加一个断点
3.b filename 行号 给指定文件的行号添加一个断点
查看断点信息:info b
删除断点:d 断点号
运行管理:
r 启动执行,程序执行到逻辑上的第一个断点处
n 逐过程
s 逐语句
finish 跳出函数
c 继续执行,直到下一个断点
u 退出循环
q 退出调试
显示变量的值:
p 变量名 输入一次,执行一次
display 变量名 执行过程中,每执行一步,显示一次
info display 显示所有display信息
undisplay display编号 取消一个display
p &valname 显示变量地址
p ptr 显示ptr中存储的值,指向变量的地址
p *ptr 显示ptr指针指向的变量的值
p arr 显示数组所有元素
p arr 在形参中退化为指针 p *arr@数组大小 显示数组所有元素
对于结构体变量
p node 显示结构体变量中所有成员的值
p node.a 显示node中a成员的值
p node->a
如果测试一个有返回值的函数能否正常执行
p 函数名(传递的实参)显示函数执行结果
bt 显示函数调用栈