2009-10-28 19 views
3

GDB的反彙編命令適用於短C標識符,例如main。對於冗長的C++標識符來說,冗長是過度的。例如,使用icpc我看到的結果類似於如何截斷GDB反彙編命令顯示的錯位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

從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其中介紹了「簡式」。

1

這並沒有真正回答你的問題,但你也許能夠至少還原函數的東西,使他們少一點醜陋:

set print asm-demangle on