2009-10-28 7 views
3

GDB의 디스 어셈블 명령은 짧은 C 식별자 (예 : main. 길고 맹 글링 된 C++ 식별자의 경우 자세한 정보가 과도합니다. 예를 들어, icpc를 사용하면 다음과 같은 결과가 표시됩니다.어떻게 GDB의 디스어셈블 명령으로 표시되는 mangled C++ 식별자를자를 수 있습니까?

(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자를 제외한 모든 클립을 말합니까?

답변

1

그것은 분해에 하나의 기능이 있다는 것을 알고있다 :

(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입니다.

1

이 정말 귀하의 질문에 대답하지 않지만, 당신이 그들을 좀 덜 추한 수 있도록 적어도 디맹 글링 일을 할 수 있습니다

set print asm-demangle on

CVS에서 현재 GDB는 당신이 원하는 방식으로 작동