كيف يمكنني اقتطاع معرفات المهترئ C ++ هو موضح من قبل القيادة تفكيك GDB على ذلك؟

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. أنها تجعل 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 لا يمكن معرفة ما إذا كان التفكيك سيعبر الحدود وظيفة، فإنه لا يزال يطبع شكل "طويل":

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

وهنا هو التصحيح حيث قدم "باختصار شكل ".

نصائح أخرى

وهذا لا يجيب حقا سؤالك، ولكن قد تكون قادرة على الأقل demangle الأشياء لجعلها أقل قليلا القبيح:

وset print asm-demangle on

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top