如何在 gdb 中禁用程序集标签打印
Posted
技术标签:
【中文标题】如何在 gdb 中禁用程序集标签打印【英文标题】:How to disable assembly label printing in gdb 【发布时间】:2022-01-01 10:43:11 【问题描述】:当我用x
检查内存时,我可以看到我正在读取的地址的符号:
(gdb) x/16zw &pt_table
0x102000 <pt_table>: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
如何禁用标签的打印(或移动到自己的行)以正确对齐数据?我在手册上找不到任何内容。
例子:
(gdb) x/16zw &pt_table
0x102000: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
或者:
(gdb) x/16zw &pt_table
<pt_table>:
0x102000: 0x00000000 0x00000000 0x00000000 0x00000000
0x102010: 0x00000000 0x00000000 0x00000000 0x00000000
【问题讨论】:
pipe x/16zw &pt_table | sed 's/ <.*>//'
适合您吗?它可以放在用户定义的命令中,以便于键入。
谢谢,该解决方案会失去着色。
【参考方案1】:
如何禁用标签的打印(或移动到自己的行)以正确对齐数据?
我查看了当前的 GDB 源 (print_address_symbolic
),没有任何方法可以禁止打印 symbol
或 symbol+offset
。
也许您想改用 LLDB。
(gdb) list
1 int abc[100];
2 int main() return abc[2];
(gdb) start
Temporary breakpoint 1 at 0x1129: file t.c, line 2.
Starting program: /tmp/a.out
Temporary breakpoint 1, main () at t.c:2
2 int main() return abc[2];
(gdb) x/8x &abc[1]
0x555555558064 <abc+4>: 0x00000000 0x00000000 0x00000000 0x00000000
0x555555558074 <abc+20>: 0x00000000 0x00000000 0x00000000 0x00000000
与 LLDB 比较:
(lldb) run
Process 3645824 launched: '/tmp/a.out' (x86_64)
Process 3645824 stopped
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
frame #0: 0x0000555555555129 a.out`main at t.c:2:24
1 int abc[100];
-> 2 int main() return abc[2];
(lldb) x/8x &abc[1]
0x555555558064: 0x00000000 0x00000000 0x00000000 0x00000000
0x555555558074: 0x00000000 0x00000000 0x00000000 0x00000000
【讨论】:
lldb 在某种程度上是 gdb 的“替代品”,还是它有自己的术语、配置等(如 vim/emacs)? | 编辑:这开始回答我的问题:gdb vs lldb 我使用dashboard .gdbinit UI 让我需要的一切一目了然。你知道(如果你使用类似的东西)LLDB 有类似的东西吗?以上是关于如何在 gdb 中禁用程序集标签打印的主要内容,如果未能解决你的问题,请参考以下文章