如何在GDB中自动打印下一个N条执行的代码行?

18

我一直在尝试找到一种自动化GDB进度跟踪程序控制流的方法。

甚至只是简单地自动化n命令,以便您可以查看调用例程的顺序。

我意识到您可以发出n x其中x是GDB步骤的次数,但问题在于它显示命令而不是程序例程的地址!但是,如果您在GDB中手动按下n(然后按回车键发出上一个命令),它会显示地址。

我已经在GDB中尝试了以下操作:

(after setting a breakpoint at say 0x0123456)
b *0x0123456

GDB显示<在0x123456处设置断点1>。我输入:

commands 1
n 1000
c
end

但是它没有如预期般循环,并且也没有显示地址位置 :-(。

任何帮助都将不胜感激!肯定有一种简单的方法可以自动记录调用顺序吧?


1
将此子集:跟踪直到达到给定断点:https://dev59.com/22w05IYBdhLWcg3w6GDH?lq=1 - Ciro Santilli OurBigBook.com
7个回答

19

其实这很简单。我会给你提供基本框架,你可以根据需要进行修改。

(gdb) define nstep
> set $foo = $arg0
> while ($foo--)
>  step
>  end
> end
(gdb) nstep 100

我已经做了很多次。希望这可以帮到你!


12

你可以使用strace来查看系统调用,使用ltrace来查看库调用,而不是使用gdb。无论是否有源代码,straceltrace都适用于任何应用程序。

如果你有源代码访问权限,那么你也可以在代码中添加追踪功能。Gcc有一种模式可以实现这一点。以下是一个example

然后你只需要分析日志文件即可。

如果你想使用纯GDB,则可以使用Breakpoint Command Lists

你可以给任何断点(或监视点或捕获点)设置一系列命令,在程序因该断点停止时执行这些命令。例如,你可能想打印某些表达式的值,或者启用其他断点。

特别地:

例如,以下是如何使用断点命令,在x为正数时打印foo入口处的x值。

break foo if x>0
commands
silent
printf "x is %d\n",x
cont
end

4
strace只显示系统调用,而ltrace仅显示穿越库边界的调用。gdb方法更加强大。 - Tobu

10
有一个用于自动跟踪函数调用的gdb shell脚本:

http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/

因为链接现在已经失效,所以我在这里发布了文本的副本(作者是Juan M. Bello Rivas - jmbr):http://web.archive.org/web/20090317091725/http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/

使用GNU项目调试器的调用图

Chris Ball要求所有喜欢Unix的人提供一种能够像strace和ltrace一样对于系统调用和库调用分别进行功能调用的工具。

我很久以前就想写这个工具,但是阻止我这样做的是我想出了一个微不足道的shell/awk脚本,它实现了几乎相同的目标。由于这个小程序对除了我之外的某些人也有用,所以我想稍微修改一下并在这里发布它。

这个工具最初的目的是从给定的程序中打印一个调用图。它通过控制GDB并自动设置断点来运作每一个函数调用。当然,可执行文件必须包含调试符号(也就是说,它必须使用gcc的-g选项编译)。下面是一些示例输出(格式为:调用者被调用者参数):

xmltree_parse xmltree_itor_next (self=0x80571e8)
xmltree_itor_next xmlnode_stack_push (stack=0x80571f0, n=0x8056780)
xmltree_parse h_requires (n=0x8056808, u=0xbff9d504)
h_requires xmlnode_get_attr (self=0x8056808, name=0x80520ea "plugin")
h_requires probe_get_name (self=0x8056af0)
h_requires htab_lookup (self=0x8058100, key=0x8056868, len=3, create=0, value=0x0)

您可以使用包含的cg2dot.awk脚本生成适合使用graphviz处理的文件。

该程序(存档大小为2110字节,md5为54b583e637d19be0502ccadfa6174756):

http://web.archive.org/web/20110902010824/http://superadditive.com/software/callgraph.tar.gz

它将程序中的所有函数转储并生成一个带有每个函数断点的gdb命令文件。在每个断点处,执行"backtrace 2"和"continue"(通过commands)。这个脚本在大型项目(~数千个函数)上运行相当缓慢,因此我添加了一个函数列表过滤器(通过egrep)。这非常容易。我几乎每个月都使用这个脚本。
PS:如果archive.org将其从档案中删除,可以使用callgraph.tar.gz的副本。使用xxd -r进行恢复。
0000000: 1f8b 0800 825e 1d49 0003 ed58 7b73 db46  .....^.I...X{s.F
0000010: 0ecf bfe2 a740 6835 926c ea69 2799 8b62  .....@h5.l.i'..b
0000020: 5f69 89b6 7927 4b3e 926a 9ab3 5497 2257  _i..y'K>.j..T."W
0000030: d2d6 14a9 922b 3b4e 93fb ec07 2ca9 97d3  .....+;N....,...
0000040: 34d3 995c 3bbd 1126 1391 c0e2 87c7 0258  4..\;..&.......X
0000050: ae3d 3708 26b1 3b9f 56bd e5d3 93af 4d35  .=7.&.;.V.....M5
0000060: a417 4747 f45b 7ff9 bcb6 f92b 45cf 1b47  ..GG.[.....+E..G
0000070: 4fea 757c 383c 7af1 fca8 fea4 563f 3c44  O.u|8<z.....V?<D
0000080: 31d4 beba 27bf 428b 44b8 31c0 939f 66a3  1...'.B.D.1...f.
0000090: f8b7 d67d 49fe 17a5 bda7 d511 0fab c954  ...}I..........T
00000a0: 51f6 a015 cd1f 623e 990a 287a 2568 d46a  Q.....b>..(z%h.j
00000b0: 4765 fcef 25fc 63e1 8670 5981 5316 0411  Ge..%.c..pY.S...
00000c0: 58fc ce4d e035 25e4 db64 3167 b1eb fb5c  X..M.5%..d1g...\
00000d0: f03b 56f1 a2d9 89b2 8740 572c 9ef1 24e1  .;V......@W,..$.
00000e0: 5108 3c81 298b d9e8 01b0 b842 c17c 0dc6  Q.<.)......B.|..
00000f0: 3163 108d c19b baf1 8469 2022 70c3 0740  1c.......i "p..@
0000100: a424 0a51 3b1a 0997 873c 9c80 0b1e ba44  .$.Q;....<.....D
0000110: 6bc5 1481 9268 2cee dd98 e172 1fdc 2489  k....h,....r..$.
0000120: 3cee 2222 f891 b798 b150 b882 2c8e 79c0  <."".....P..,.y.
0000130: 1284 298a 2903 d5ce 74d4 9234 e433 3700  ..).)...t..4.37.
0000140: 1e02 c996 22b8 e762 1a2d 04c4 2c11 31f7  ...."..b.-..,.1.
0000150: 0845 4300 1e7a c1c2 273f 960b 023e e399  .EC..z..'?...>..
0000160: 1502 90b9 4a08 7691 601c e4ab 06b3 c8e7  ....J.v.`.......
0000170: 63fa 6514 1cc2 cc17 a380 2753 0d7c 4ef0  c.e.......'S.|N.
0000180: a385 c0b5 0931 3d16 921e 4653 8d62 4830  .....1=...FS.bH0
0000190: bb84 c159 9246 bcf6 9060 2866 b434 a7d4  ...Y.F...`(f.4..
00001a0: 8a2c 59d2 f6fd 349a 6dc7 83a9 1a2f e210  .,Y...4.m..../..
00001b0: 8d32 a9e3 4798 3ac2 40ab 3f31 4f10 8f14  .2..G.:.@.?1O...
00001c0: c611 eee7 3d05 e845 21ed 2122 be92 1be8  ....=..E!.!"....
00001d0: a0d4 1d45 774c 0695 d644 1809 f438 f583  ...EwL...D...8..
00001e0: 7663 bede e44c 944c 7186 c088 ad72 87e6  vc...L.Lq....r..
00001f0: 31d7 ee46 5c31 f980 2d17 0a8e 1b31 8f62  1..F\1..-....1.b
0000200: 69f4 71bc 95d4 890b 03ec de99 f346 b70c  i.q..........F..
0000210: 306d b8b2 7adf 996d a30d aa6e e3bb aac1  0m..z..m...n....
0000220: 1bd3 b9e8 f51d c015 96de 75de 42ef 0cf4  ..........u.B...
0000230: ee5b f8a7 d96d 53bc c6f7 5796 61db d0b3  .[...mS...W.a...
0000240: c0bc bcea 9846 5b03 b3db eaf4 db66 f71c  .....F[......f..
0000250: 4e51 b3db 73a0 635e 9a0e c23a 3d69 3203  NQ..s.c^...:=i2.
0000260: 330d d43b 4390 4bc3 6a5d 2043 3f35 3ba6  3..;C.K.j] C?5;.
0000270: f356 8333 d3e9 12ea 19c2 ea70 a55b 8ed9  .V.3.......p.[..
0000280: ea77 740b aefa d655 cf36 d085 36ea 757b  .wt....U.6..6.u{
0000290: 5db3 7b66 a125 e3d2 e83a 15b4 8c3c 30be  ].{f.%...:...<0.
00002a0: c317 b02f f44e 479a d3fb 1883 257d 6cf5  .../.NG.....%}l.
00002b0: aede 5ae6 f985 0317 bd4e dbb0 6c44 3935  ..Z......N..lD95
00002c0: d03f fdb4 63a4 e630 b856 4737 2f35 68eb  .?..c..0.VG7/5h.
00002d0: 97fa b921 f57a 8863 c965 9987 6f2e 0cc9  ...!.z.c.e..o...
00002e0: 428b 7a17 41f4 9663 f6ba 949d 56af eb58  B.z.A..c....V..X
00002f0: f8aa 61b4 96b3 527e 63da 8606 ba65 da94  ..a...R~c....e..
0000300: 9833 ab87 0628 b1a8 41b9 230c d4ec 1a29  .3...(..A.#....)
0000310: 0ea5 7d7b 7770 11bd f76d 63ed 4fdb d03b  ..}{wp...mc.O..;
0000320: 8866 9317 c840 88e5 f28a a2cc e368 7213  .f...@.......hr.
0000330: ba33 76ac ae0e 1e55 51f8 18ae 21bf 07e5  .3v....UQ...!...
0000340: 4040 1d86 4daa 8a50 0124 e64d 2350 fb89  @@..M..P.$.M#P..
0000350: 3b61 af20 bf52 c72d 365a 7d47 26e8 5ab7  ;a. .R.-6Z}G&.Z.
0000360: ceed 4aa5 3254 571a 1baa c63b 7736 0fb6  ..J.2TW....;w6..
0000370: 95ff 2387 9fc0 b62f 1333 7667 d813 1134  ..#..../.3vg...4
0000380: 0e33 8477 d869 7565 cc69 38da 6ec8 c503  .3.w.iue.i8.n...
0000390: 0e2d e6dd 2615 e5cc ec18 c7f9 7ae6 f253  .-..&.......z..S
00003a0: 28bf 833c f17e c5e9 b5c1 57d0 0fdd 51c0  (..<.~....W...Q.
00003b0: a801 c71c 1b89 bd63 de42 4856 41aa 173e  .......c.BHVA..>
00003c0: b1dc d1bb e7c7 aa0a 137f 04e5 32bb 7383  ............2.s.
00003d0: 32ce d919 b6e1 f1cf 0b5c 955a 6d9c 3cab  2........\.Zm.<.
00003e0: c340 ea7e c049 cbe6 5036 a050 0ca3 018e  .@.~.I..P6.P....
00003f0: bcd1 6232 c12e 1f40 f230 1b45 4132 c028  ..b2...@.0.EA2.(
0000400: 17a1 ff01 db76 800d 3ad8 7083 44f1 cc15  .....v..:.p.D...
0000410: a542 0a79 0255 9fdd 55c3 4510 649b f377  .B.y.U..U.E.d..w
0000420: 28b3 9fa1 f669 9ce5 703b d496 1b16 7050  (....i..p;....pP
0000430: c53c 1440 7b0c 7293 097f 192b 8e0a cfc5  .<.@{.r....+....
0000440: d109 5c14 121a 2238 f0d5 8dc4 e1e6 b8f1  ..\..."8........
0000450: c366 9230 f239 8e77 5f4e e475 64cb c02a  .f.0.9.w_N.ud..*
0000460: 9bd9 6bca f425 533e 1672 ff98 80c5 1c04  ..k..%S>.r......
0000470: 9be1 d421 5879 4e54 146a 07e3 58fd 7176  ...!XyNT.j..X.qv
0000480: 4b22 288b 8d02 a97c bfa2 1f55 f8f0 4122  K"(....|...U..A"
0000490: 2be7 8673 d6ef b6ec dfa5 2430 7828 c433  +..s......$0x(.3
00004a0: 288f 711b 3153 d2ae 8a0f 4b38 b580 c56c  (.q.1S....K8...l
00004b0: 3ad9 4af9 7f59 729a f09b 6acd 2cde 025c  :.J..Yr...j.,..\
00004c0: f4af b0d9 1cf8 57df 74c0 31ac 4b8a db71  ......W.t.1.K..q
00004d0: 6f29 6fa1 88a3 80e6 ec79 fb54 cef0 c71b  o)o......y.T....
00004e0: 5351 3c57 e07e af80 e1f5 6b03 0760 8279  SQ<W.~....k..`.y
00004f0: 9b32 7902 d414 1e8e b172 17a1 3c23 1385  .2y......r..<#..
0000500: e44a 5a98 2357 7853 fc5d d6e6 1a66 59a0  .JZ.#WxS.]...fY.
0000510: ab42 c20a 75ef 6fa1 a02c 8160 c2c4 0dbd  .B..u.o..,.`....
0000520: c8fc 15f1 942c 29bf e04e 26f3 800b 7ad5  .....,)..N&...z.
0000530: 60ee c642 03b5 a896 9a28 0858 08c7 9998  `..B.....(.X....
0000540: 24d7 f5e1 6a09 7c66 0932 d68b f669 11ae  $...j.|f.2...i..
0000550: 8a99 c083 1256 0b9a ca47 4539 35ce 7164  .....V...GE95.qd
0000560: 9103 2212 784a 1d43 8d10 d384 a994 8f7b  ..".xJ.C.......{
0000570: ee63 f9d5 d447 ec65 9a1e f3ef 583c 8a12  .c...G.e....X<..
0000580: fae6 19ab d242 f5da 2dbf d7cb ffbe 1966  .....B..-......f
0000590: 0fb5 f2df 6e86 fb83 6255 9a1d 93eb db39  ....n...bU.....9
00005a0: c9d7 4a2b d071 511d c5cc bd85 6f92 4188  ..J+.qQ.....o.A.
00005b0: a7e0 3894 b283 03e9 ae34 6074 db29 1236  ..8......4`t.).6
00005c0: 5b91 235a bd09 1c5e 1fa7 11e1 f3c1 4149  [.#Z...^......AI
00005d0: 2e58 f999 ed5b 8278 bc29 05d5 fda5 4cee  .X...[.x.)....L.
00005e0: 3a7e ab25 586b fbd5 4dad 91eb dd62 a5e2  :~.%Xk..M....b..
00005f0: d9df 509b db70 78c2 870b b6cd 65a1 2f19  ..P..px.....e./.
0000600: 1f95 7582 e245 a8a2 cb05 2a3d 59dc 9fad  ..u..E....*=Y...
0000610: 2829 4586 100f c7eb 622a 97c9 b3ac caf2  ()E.....b*......
0000620: df7e b9d0 a8e4 1956 d956 8d61 d418 2456  .~.....V.V.a..$V
0000630: 8696 964f ca26 de75 6348 295e 5756 aa8f  ...O.&.ucH)^WV..
0000640: 391d 8758 779b 6594 4ae4 066c 59c4 f272  9..Xw.e.J..lY..r
0000650: 6709 1909 1f19 4509 31d7 1691 210d 4a81  g.....E.1...!.J.
0000660: 0ad8 9199 3f8b 1116 0716 886c 0229 47e3  ....?......l.)G.
0000670: 8f8b 58fa b355 c13c 8999 17c5 feb2 8857  ..X..U.<.......W
0000680: ceab eaea 35a6 d77d b36b 3aa6 ded9 4f8b  ....5..}.k:...O.
0000690: 577a 9c2d a382 fde1 942a 6e1e d196 5d63  Wz.-.....*n...]c
00006a0: b50e 0fb4 ea63 0375 e9cd cac2 46ae 97d5  .....c.u....F...
00006b0: bb44 dd48 4abe a665 2aa5 ccd2 5efd 1a06  .D.HJ..e*...^...
00006c0: 6278 90e1 8fb1 8033 1b25 594b 2b9f f347  bx.....3.%YK+..G
00006d0: 9946 fed3 a5f0 ec19 5e62 d295 4fb7 c22b  .F......^b..O..+
00006e0: 6d15 3ef6 d237 09c8 7fb2 9752 95a5 4b5a  m.>..7.....R..KZ
00006f0: e672 a9b9 b64c a1ad 5cd8 ca13 d535 16b2  .r...L..\....5..
0000700: f267 dfe9 7e0f 79eb fbff a4e1 47a2 820d  .g..~.y.....G...
0000710: f3b5 6d7c e1fe 5f3b acbd fce4 fe7f f472  ..m|.._;.......r
0000720: 77ff ff23 28bb ff4f 684e 96c7 0a4e a71c  w..#(..OhN...N..
0000730: f327 2cb9 ced7 35c8 3786 695b af4e 945c  .',...5.7.i[.N.\
0000740: 36b4 7d9e 7ecc 9dc3 2f58 f839 79cc e09c  6.}.~.../X.9y...
0000750: 46a8 f4ca 2731 a8d1 72b9 74ae 2d85 9a14  F...'1..r.t.-...
0000760: 6960 f74f 6de3 0afb 2a97 5bf6 e140 0cb0  i`.Om...*.[..@..
0000770: 1707 2a94 4f20 7d6a ca96 2405 79c0 cb87  ..*.O }j..$.y...
0000780: 060d bddc c795 271f e580 fab3 d3f8 97a5  ......'.........
0000790: 75ff d32d a8e2 fd2f 6c7c a9ff 8f1a f547  u..-.../l|.....G
00007a0: fddf 7851 abef faff 8fa0 bdec 0f35 f03a  ..xQ.........5.:
00007b0: 113e 8f2a d313 658b 15f0 11f1 9484 feec  .>.*..e.........
00007c0: e5c1 5dc4 7dba 2217 a9f7 e8bb 6593 3f72  ..].}.".....e.?r
00007d0: e3cf f0df aff8 7883 10ca cce5 a1e4 e097  ......x.........
00007e0: 9ba7 c9bf 03c2 3e3e df5d 0fe9 fb28 4706  ......>>.]...(G.
00007f0: 1a87 b43a 4757 9b22 5d82 6eec 7eab 65d8  ...:GW."].n.~.e.
0000800: 76fa 9520 7195 b523 a445 e6c3 b558 59bb  v.. q..#.E...XY.
0000810: 934a df3f 92be df90 a69f 50bb 49b2 a31d  .J.?......P.I...
0000820: ed68 473b dad1 8e76 b4a3 1ded 6847 3bda  .hG;...v....hG;.
0000830: d18e fe0f e9bf e4d9 0494 0028 0000       ...........(..

7

5
很有趣,但是这个项目似乎已经被放弃了(或者至少不支持 x86_64 …),还有其他类似的程序吗? - jettero
"legOndary" 是一个打字错误还是只是有趣的呢? - Ciro Santilli OurBigBook.com

1

0

我专门创建了一个脚本来完成这个任务,它自动化了gdb发送's'并读取gdb的输出,不断地将结果输出到文本文件和终端。

这个脚本是用C语言编写的,并发布在我的博客上。

http://www.codeground.net/coding/gdb-step-into-all-lines-to-get-full-application-flow/

我在搜索那个脚本的时候遇到了这个问题,但是找不到完全相同的东西,所以希望这能帮助其他人。

wget http://www.codeground.net/downloads/gdbwalkthrough.c
gcc gdbwalkthrough.c -o gdbwalkthrough
./gdbwalkthrough <application full path> [application arguments]

这个脚本可以很容易地修改,只需替换一下它就可以仅遍历某些行,或者仅遍历预定义的次数

while(1)
    writeDebugger("s",NULL);

使用这个

int x=1000;
while(x--)
    writeDebugger("s",NULL);

-1
据我所知,自动化gdb并不容易。您可以尝试使用insight,看看少量的tcl脚本能否帮助您。
您可以尝试使用一些expect脚本来自动化gdb/MI。
在可自动化调试器中,我发现Sun的dbx最好。它集成了'ksh'。它在linux上可用。

1
很长一段时间以来,gdb已经支持了各种脚本选项。它还提供了一个Python API,您可以从gdb中运行Python,也可以从Python中运行gdb...使用expect/pexpect是处理具有合理现代化的gdb的最糟糕的方法之一。 - sillyMunky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接