Wie kann ich gestutzt die entstellten C ++ Bezeichner von GDB disassemble Befehl gezeigt?
-
08-07-2019 - |
Frage
GDB disassemble Befehl ist schön für kurze C-Kennungen, z.B. Haupt . Für lange, verstümmelten C ++ Identifikatoren der Ausführlichkeit Overkill ist. Zum Beispiel mit icpc sehe ich Ergebnisse wie
(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
Displays, die lange ärgerlich in der CLI sind. Sie machen GDB TUI Montage Anzeige alle, aber nutzlos.
Gibt es eine Möglichkeit GDB zu sagen, ein verkürztes Kennung zu zeigen? Sagen Clip alle aber 50 Zeichen?
Lösung
Aktuelle GDB von CVS verhält sich so, wie Sie wollen, wenn es weiß, dass es nur eine Funktion bei der Demontage ist:
(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.
Wenn GDB kann nicht wissen, ob oder ob nicht die Demontage Funktion Grenze überschreiten wird, druckt er immer noch die „lange“ Form:
(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.
Andere Tipps
Dies ist nicht wirklich Ihre Frage beantworten, aber Sie könnten zumindest demangle Dinge Lage sein, sie etwas weniger hässlich zu machen:
set print asm-demangle on