あなたが知らないかもしれないGDBコマンド







コードのデバッグは、ハンティングのようなものです。バグハンティング。

-アミット・カラントリ


GDBとは



GNUデバッガーは、多くのUNIXライクなシステムで実行され、C、C ++、Free Pascal、FreeBASIC、Ada、Fortran、Rustなどの多くのプログラミング言語をデバッグできるGNUプロジェクト用のポータブルデバッガーです。GDBは、GPLライセンスの下でリリースされた自由ソフトウェアです。

出典:GNUデバッガー-ウィキペディア







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







この記事には、実行、停止、終了など、理解しやすいコマンドは含まれていませんこの記事はGDBユーザーが知らないかもしれない情報を伝えようとしているので、私はそれらを意図的に指定しませんでした。記事を補足する方法について何か提案があれば、コメントを喜んで読みます。








All Articles