Perintah GDB yang Mungkin Tidak Anda Ketahui







Kode debug seperti berburu. Perburuan serangga.

- Amit Kalantri


Apa itu GDB



GNU Debugger adalah debugger portabel untuk proyek GNU yang berjalan pada banyak sistem mirip UNIX dan dapat men-debug banyak bahasa pemrograman, termasuk C, C ++, Free Pascal, FreeBASIC, Ada, Fortran, dan Rust. GDB adalah perangkat lunak gratis yang dirilis di bawah lisensi GPL.

Sumber: GNU Debugger - Wikipedia







GDB โ€” , .







, , , GDB.







, โ€” , . , , :







Caesar::shift Caesar
Caesar::ChangeShift Caesar
Caesar::Crypt Caesar


(TUI)



TUI, GDB, , , . TUI GDB tui enable









( ) - . Ctrl + p (previous), Ctrl + n (next), ( ).







: - tui enable



, โ€” tui disable



.









breakpoint



( โ€” b).

:







  • ()
  • ,


, โ€” .







b Method if variable == value



โ€” .







:







(gdb) b Crypt if Caesar::shift == 1
Note: breakpoint 2 also set at pc 0x4026e3.
Breakpoint 4 at 0x4026e3: file Caesar.h, line 55.
      
      





Crypt()



, Caesar



shift



1.







: delete



, d



.







: : , , , .







Scope,



next



step



(: n s) , next Scope ( ), step Step In .







: continue



, finish



fin



.







: step



, โ€” next



.









. print



p



, .







display



display



,







(gdb) display Caesar::shift
1: Caesar::shift = <error: Cannot reference non-static field "shift">
(gdb) n

Breakpoint 2, Caesar::Crypt (this=0x7fffffffdc30, text="Crypt this text! Btw, xyz") at Caesar.h:55
1: Caesar::shift = 1
(gdb) n
1: Caesar::shift = 1
(gdb)
      
      





:







(gdb) display *stringArrayForOutput@lengthOfArray
1: *stringArrayForOutput@lengthOfArray = {"Etarv vjku vgzv! Dvy, zab", "Fubsw wklv whaw! Ewz, abc", "Gvctx xlmw xibx! Fxa, bcd"}
(gdb) 
      
      





, lengthOfArray



( ) . GDB .







explore



, , , explore



.







explore



,







(gdb) explore Caesar::shift
'Caesar::shift' is a scalar value of type 'int'.
Caesar::shift = 6

(gdb) explore Caesar
'Caesar' is a struct/class with the following fields:

letters = <Enter 0 to explore this field of type 'std::string'>
shift = <Enter 1 to explore this field of type 'int'>
      
      





: print



explore



display



.









" " , , record



, ,







(gdb) target record-full
(gdb) p Caesar::shift
$1 = 6
(gdb) n
(gdb) p Caesar::shift
$2 = 7
(gdb) reverse-next

No more reverse-execution history.
(gdb) p Caesar::shift
$3 = 6
      
      





, โ€” record stop



, , record save < >



.







: GDB , , .









info local



:







(gdb) info local
mainObj = {letters = "abcdefghijklmnopqrstuvwxyz", shift = 1}
textForC = "Crypt this text! Btw, xyz"
cryptedText = "Dszqu uijt ufyu! Cux, yza"
outputVariants = 0x402280 <_start>
      
      





, info variables



:







(gdb) info variables
All defined variables:

File /usr/include/c++/10/bits/basic_string.h:
101:    const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size_type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::npos;

File /usr/include/c++/10/bits/stl_pair.h:
83:     static const std::piecewise_construct_t std::piecewise_construct;

File /usr/include/c++/10/iostream:
74:     static std::ios_base::Init std::__ioinit;

Non-debugging symbols:
0x00000000004002e8  __abi_tag
0x0000000000403000  _IO_stdin_used
0x00000000004031b8  typeinfo for std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
0x00000000004031e0  typeinfo name for std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
--Type <RET> for more, q to quit, c to continue without paging--
      
      





info b



:







(gdb) info b   
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000402633 in Caesar::ChangeShift() at Caesar.h:31
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00000000004026e3 in Caesar::Crypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) at Caesar.h:55
        breakpoint already hit 1 time
      
      





whatis



:







(gdb) whatis Caesar::shift
type = int
(gdb) whatis Caesar
type = Caesar
      
      





, info address



:







(gdb) info address Caesar::Crypt
Symbol "Caesar::Crypt(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)" is a function at address 0x4026be.
      
      







, , , , , . Linux -, . - , Unix- .







Artikel ini tidak menyertakan beberapa perintah yang mudah dimengerti , misalnya: run, stop, exit, dll. Saya tidak sengaja menyebutkannya, karena artikel tersebut mencoba menyampaikan informasi yang mungkin tidak diketahui oleh pengguna GDB. Jika Anda memiliki saran bagaimana cara melengkapi artikel, saya dengan senang hati akan membaca komentarnya.








All Articles