GCC
1》完整的GCC编译过程:
- 预处理pre-processing: -E 例如:g++ -E test.cpp -o test.i 预处理后生成.i文件
- 编译compling -S 例如:g++ -S test.i -o test.s 编译后生成.s汇编文件
- 汇编assembling -c 例如:g++ -c test.s -o test.o 汇编源代码编译为机器语言的目标代码
- 链接linking g++ test.o -o test 产生可执行文件
该过程等同于g++ test.cpp -o test
2》 g++重要的编译参数
- -g 编译带调试信息的可执行文件 g++ -g test.cpp -o test
- -O[n] 优化源代码
- -lglog 默认/ -L 自定义目录 -l库名
- -I 指定头文件搜索目录 g++ -I/myinclude test.cpp
- -Wall 打印警告信息
- -w 关闭警告信息
- -std=c++11 设置编译标准
- -o 指定输出文件名 (不加该参数默认生成a.out)
- -D 使用编译器时定义宏
G++
1》断点
设置断点可以通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、文件名+行号以及偏移量、地址等进行设置。
格式为:
break 函数名
break 行号
break 文件名:函数名
break 文件名:行号
break +偏移量
break -偏移量
break *地址
删除断点通过命令包括:
delete <断点id>:删除指定断点
delete:删除所有断点
clear
clear 函数名
clear 行号
clear 文件名:行号
clear 文件名:函数名
断点还可以条件断住
break 断点 if 条件;比如break sum if value==9,当输入的value为9的时候才会断住。
condition 断点编号:给指定断点删除触发条件
condition 断点编号 条件:给指定断点添加触发条件
断点还可以通过disable/enable临时停用启用。
disable
disable 断点编号
disable display 显示编号
disable mem 内存区域
enable
enable 断点编号
enable once 断点编号:该断点只启用一次,程序运行到该断点并暂停后,该断点即被禁用。
enable delete 断点编号
enable display 显示编号
enable mem 内存区域
2》显示栈帧
如果遇到断点而暂停执行,或者coredump可以显示栈帧。
通过bt可以显示栈帧,bt full可以显示局部变量。
命令格式如下:
bt
bt full:不仅显示backtrace,还显示局部变量
bt N:显示开头N个栈帧
bt full N
3》打印变量
“print 变量”可以显示变量内容。
如果需要一行监控多个变量,可以通过p {var1, var2, var3}。
如果要跟踪自动显示,可以使用display {var1, var2, var3}
4》单步执行
单步执行有两个命令next和step,两者的区别是next遇到函数不会进入函数内部,step会执行到函数内部。
如果需要逐条汇编指令执行,可以分别使用nexti和stepi。
5》继续执行
调试时,使用continue命令继续执行程序。程序遇到断电后再次暂停执行;如果没有断点,就会一直执行到结束。
continue:继续执行
continue 次数:继续执行一定次数。
6》监视点
要想找到变量在何处被改变,可以使用watch命令设置监视点watchpoint。
watch <表达式>:表达式发生变化时暂停运行
awatch <表达式>:表达式被访问、改变是暂停执行
rwatch <表达式>:表达式被访问时暂停执行
7》改变变量的值
“通过set variable <变量>=<表达式>”来修改变量的值。
949

被折叠的 条评论
为什么被折叠?



