Как я могу усечь искаженные идентификаторы C ++, показанные командой GDB disassemble?

StackOverflow https://stackoverflow.com/questions/1638967

  •  08-07-2019
  •  | 
  •  

Вопрос

Команда дизассемблирования 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. Они делают отображение сборки TUI в GDB практически бесполезным.

Есть ли способ указать GDB, чтобы он отображал усеченный идентификатор? Скажи клип все, кроме 50 символов?

Это было полезно?

Решение

Текущая GDB из CVS ведет себя так, как вы хотите, когда она знает, что в разборке есть только одна функция:

(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 не может знать, будет ли дизассемблирование пересекать границу функции, он все равно печатает " long " форма:

(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.

Вот патч , в котором появился " краткая форма ".

Другие советы

Это на самом деле не отвечает на ваш вопрос, но вы можете, по крайней мере, разобрать вещи, чтобы сделать их немного менее уродливыми:

установить печать asm-demangle на

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top