gdb 默认是att汇编,可通过以下指令进行转换
set disassembly-flavor intel
从配置文件上进行设置也可以
echo "set disassembly-flavor intel" > ~/.gdbinit
disassemble
disassemble /m main
/m 可以现实对应的源码
如果在gdb外的话直接使用objdump -S 也是可以看到对应的源码的
先使用info line 找到行对应的汇编地址,比如要找 agora.cpp:308, 看到start address 0x7f51ff963634 和 end address 0x7f51ff963656 , 就是对应的汇编程序段
(gdb) info line agora.cpp:308
Line 308 of "agora.cpp" starts at address 0x7f51ff963634 <rtm_recv_channel_msg(void*, void*)+132> and ends at 0x7f51ff963656 <rtm_recv_channel_msg(void*, void*)+166>
然后使用disassemble 直接查看该段内存(该功能对gdb版本有要求)
disassemble 0x7f51ff963634 0x7f51ff963656
也可以使用x查看内存的方式进行查看
x/i 0x7f51ff963634
/i 表示按照指令地址格式
常用
源码汇编对应调试
layout split
显示所有寄存器
layout regs
退出layout
ctrl+x a
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
3.1 内存查看
格式: x /nfu <addr>
n: 查看的number
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
GDB 单步调试汇编_cnblogs
layout 的使用
disasemble的使用
gdb x的用法
原文:https://www.cnblogs.com/ishen/p/12719131.html