GDB의 분해 명령으로 표시된 Mangled C ++ 식별자를 어떻게 자르려면?

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

  •  08-07-2019
  •  | 
  •  

문제

GDB의 분해 명령은 짧은 C 식별자에게 좋습니다. 기본. 긴 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자를 제외한 클립을 말 하시겠습니까?

도움이 되었습니까?

해결책

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.

여기에 있습니다 반점 "짧은 형태"를 소개했습니다.

다른 팁

이것은 실제로 당신의 질문에 대답하지는 않지만, 당신은 적어도 그것들을 조금 덜 못 생겼을 것입니다.

set print asm-demangle on

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top