Linux编译调试相关命令
记录Linux编译调试相关命令的参数
gcc/g++编译
gcc/g++执行编译需要四步:
- 预处理,后缀为
.i
- 编译,后缀为
.s
- 汇编,后缀
.o
- 链接
常用参数
-c
只执行预处理,编译和汇编,生成.o
文件-C
在预处理时不删除注释-E
只执行预处理-S
只执行预处理和编译,生成.s
文件-o
指定目标名称,如果缺省并执行了链接则会为a.out
-M
生成文件关联的信息,-MM
生成的关联信息忽略#include<file>
的依赖-O0
、-O1
、-O2
、-O3
编译器的优化等级,-O0
表示没有优化,-O1
为缺省值,-O3
优化级别最高-g
指示编译器,在编译的时候,产生调试信息。-v
打印执行信息-m32
/-m64
生成32/64位程序-masm=att
AT&T格式汇编、-masm=intel
Intel格式汇编
GDB
Layout命令
命令 | 功能 |
---|---|
layout src | 显示源码窗口 |
layout asm | 显示汇编窗口 |
layout split | 显示源码 & 汇编窗口 |
layout regs | 显示汇编 & 寄存器窗口 |
layout next | 下一个layout |
layout prev | 上一个layout |
C-x 1 | 单窗口模式 |
C-x 2 | 双窗口模式 |
C-x a | 回到传统模式 |
跳转命令
命令 | 功能 |
---|---|
start | 开始启动程序,并停在main第一句等待命令 |
step | 执行下一行语句, 如语句为函数调用, 进入函数中 |
next | 执行下一行语句, 如语句为函数调用, 不进入函数中 |
finish | 连续运行到当前函数返回为止 |
continue | 从当前位置继续运行程序 |
return | 强制令当前函数返回 |
call func() | 强制调用函数, 也可以用print func() |
run | 从头开始运行程序 |
quit | 退出程序 |
until | 运行程序直到退出循环体; / until+行号: 运行至某行 |
调试输出命令
命令 | 功能 |
---|---|
输出变量值 & 调用函数 & 通过表达式改变变量值 | |
info var | 查看全局 & 静态变量 |
info locals | 查看当前函数局部变量 |
list | 查看当前位置代码 |
backtrace | 查看各级堆栈的函数调用及参数 |
set var 变量=xx | 将变量赋值为xx |
断点
命令 | 功能 | 简写 |
---|---|---|
break N_LINE | 在第N_LINE行上设置断点 | b n |
b func | 在func函数上设置端点 | |
delete breakpoints | 删除断点 | |
disable breakpoints | 禁用断点 | |
enable 断点号 | 启动端点 | |
info breakpoints | 查看断点列表 | info b |
break foo if x>0 | 设置条件断点 | |
clear n | 清除第n行的断点 |
观察点
当待观察点被读 或 被写时,程序停下来,并输出相关信息
命令 | 功能 |
---|---|
watch | 设置写观察点 |
rwatch | 设置读观察点 |
awatch | 设置读写观察点 |
info watchpoints | 查看观察点列表 |
Display跟踪点
命令 | 功能 |
---|---|
display var | 每次停下来时,显示设置的变量var的值 |
undisplay | 取消跟踪显示 |
info display | 设置读写观察点 |
info watchpoints | 查看跟踪列表 |
运行信息
where/bt
:当前运行的堆栈列表set args
参数:指定运行时的参数show args
:查看设置好的参数info program
: 来查看程序的是否在运行,进程号,被暂停的原因
TUI
Text User Interface
开启方式:
- gdb启动时添加
-tui
参数 - 在gdb命令行执行
tui enable
Ctrl + n,下一命令(Next)
Ctrl + p,上一命令(Prev)
QEMU
进入退出monitor
C-a c
在console和monitor模式切换。其他命令如下:
前缀 | 指令 | |
---|---|---|
Ctrl+a |
h |
help |
Ctrl+a |
x |
退出QEMU |
Ctrl+a |
c |
虚拟机和QEMU控制台切换 |
地址类
i /fmt addr – I/O port read
o /fmt addr value – I/O port write
x /fmt addr – virtual memory dump starting at ‘addr’
xp /fmt addr – physical memory dump starting at ‘addr’
print|p /fmt expr – print expression value (use $reg for CPU register access)查询
info [subcommand] – show various information about the system state控制
system_powerdown – send system power down event
system_reset – reset the system
system_wakeup – wakeup guest from suspend