GDB的反汇编命令适用于短C标识符,例如main。对于冗长的,受损的C ++标识符,详细程度是过度的。例如,使用icpc我看到的结果如
(gdb) disassemble 0x49de2f 0x49de5b
Dump of assembler code from 0x49de2f to 0x49de5b:
0x000000000049de2f <_ZN5pecos8suzerain16fftw_multi_array6detail18c2c_buffer_processIPA2_dPKSt7complexIdEilNS2_26complex_copy_differentiateIS4_EEEEvT_T1_T2_T0_SD_SE_RKT3_+167>: mov 0x18(%rsp),%rsi
在CLI中显示长时间的烦人行为。它们使GDB的TUI组件显示无用。
有没有办法告诉GDB显示截断的标识符?说剪辑除了50个字符外?
答案 0 :(得分:1)
这并没有真正回答你的问题,但你可能至少可以解决问题,使它们变得不那么丑陋了:
set print asm-demangle on
答案 1 :(得分:1)
当CVS知道反汇编中只有一个函数时,CVS中的当前GDB会以您想要的方式运行:
(gdb) disas 0x000000000040071c
Dump of assembler code for function _ZNKSt8_Rb_treeIPiSt4pairIKS0_S0_ESt10_Select1stIS3_ESt4lessIS0_ESaIS3_EE21_M_get_Node_allocatorEv:
0x000000000040071c <+0>: push %rbp
0x000000000040071d <+1>: mov %rsp,%rbp
0x0000000000400720 <+4>: mov %rdi,-0x8(%rbp)
0x0000000000400724 <+8>: mov -0x8(%rbp),%rax
0x0000000000400728 <+12>: leaveq
0x0000000000400729 <+13>: retq
End of assembler dump.
当GDB无法知道反汇编是否会越过函数边界时,它仍会打印出“长”形式:
(gdb) disas 0x000000000040071c 0x000000000040071c+1
Dump of assembler code from 0x40071c to 0x40071d:
0x000000000040071c <_ZNKSt8_Rb_treeIPiSt4pairIKS0_S0_ESt10_Select1stIS3_ESt4lessIS0_ESaIS3_EE21_M_get_Node_allocatorEv+0>: push %rbp
End of assembler dump.
以下是引入“简短形式”的patch。