5 ]% g& E \; Z8 e
, t4 y e0 E9 _1 A
注意要使用gdb调试必须在源代码生成二进制程序的时候, 加上 -g 选项 9 E& ?: p; x' t. K 6 F5 C# A' M* [: t" Y接下来就开始调试gdb+binFile 可执行文件 1 |4 P: V3 l3 I# N( v ! Y/ [+ D% i2 [) B 退出 1 h9 d6 v! s6 A; e4 I ctrl + d # t2 k. u0 C2 A
或 ) q" {( h1 F" H% Z$ `$ p/ K3 ^ quit$ S3 e X- l' ?! _
4 W6 e$ v6 ^ h
* {2 ]" |9 d: K" Q' ?8 \
[code][grm@VM-8-12-centos lesson3]$ gdb a.out5 }. L/ v6 \/ ~6 m- t( n) Q& ]
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7 8 E7 L2 o$ K% JCopyright (C) 2013 Free Software Foundation, Inc. / t3 T5 J6 K0 S9 i- VLicense GPLv3+: GNU GPL version 3 or later ) L) B' i! |/ d, d
This is free software: you are free to change and redistribute it. ( c. }: p$ [3 Z/ K6 GThere is NO WARRANTY, to the extent permitted by law. Type "show copying"5 Z) Q% n. N8 m
and "show warranty" for details.- ^3 r; ^# [& m$ Y ^& u3 d
This GDB was configured as "x86_64-redhat-linux-gnu". ' q8 k, f" o8 ]6 y& HFor bug reporting instructions, please see: $ M) x6 b' [4 U" U' h- ?... , i) C3 S/ m' u2 n {; M' K; KReading symbols from /home/grm/lesson3/a.out...done.3 ~) m% H' q) N& V% O
(gdb) l' \! Y4 d+ p# z) g3 Y" n! n
7 for(int i=1;i 8 _# ]; q: L: ]2 ^# A& c3 P这里的l表示listl 行号显示binFile源代码接着上次的位置往下列每次列10行。5 t8 H. o$ Z O' O w
1 R- @7 m7 v' i9 N% r _! |' H8 rr: r或run运行程序 (类似于VS中的f5) 7 D3 F& X }" D0 y ( K# C* H5 q2 n) g3 Z! A% U% x# e
再来介绍两个比较常用的命令n 和 s2 \( L& u( U) H( q4 X0 E* ~% _( }7 t
) `" T7 a- @3 D/ ]
n 或 next单条执行 (逐过程VS下为f10)0 f" [' U& c$ r: E. t
, C0 C h3 I- t/ {3 x* F s或step进入函数调用 (逐语句,VS下为f11) + @) C* j, v* Z) k & |# J( o% X; h+ L
在介绍这两个命令前还得介绍一个打断点的命令break(b) 行号在某一行设置断点 + E$ M+ v' @" {# U- d : N, M; u$ L' i i当然还可以在指定文件中某一行或者某个函数打断点也是可行的b 文件名函数名行号' H! I- N$ Y; o" L( y& M+ p! r' R" J
2 n1 O+ w+ j7 Q4 t v3 P
我们不妨在第九行设置一个断点然后ran起来到第九行通过逐过程来走读代码2 k% X, u2 P; m5 R" W' ]% x