如何在 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 &amp;pt_table | sed 's/ &lt;.*&gt;//' 适合您吗?它可以放在用户定义的命令中,以便于键入。 谢谢,该解决方案会失去着色。 【参考方案1】:

如何禁用标签的打印(或移动到自己的行)以正确对齐数据?

我查看了当前的 GDB 源 (print_address_symbolic),没有任何方法可以禁止打印 symbolsymbol+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 中禁用程序集标签打印的主要内容,如果未能解决你的问题,请参考以下文章

尝试在程序集程序中打印变量时,GDB显示错误消息

为啥 GDB 会启动一个新的 shell 以及如何禁用这种行为?

在gdb中禁用print pretty

如何在gdb中禁用新的线程/线程退出消息?

如何获取 gdb tui 程序集输出以显示指令?

如何使用 gdb 为 Fortran 程序打印数组大小(绑定)