16

一段时间以来,我一直在尝试寻找一种方法来自动化 GDB 中跟踪程序控制流的进度。

甚至只是自动化n命令的一种简单方法,因此您可以查看调用例程的顺序。

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

我在 GDB 中尝试了以下方法:

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

GDB 说<breakpoint 1 at 0x123456>。我输入:

commands 1
n 1000
c
end

但它没有按预期循环,也没有显示地址位置:-(。

任何帮助,将不胜感激!当然,自动记录调用的命令例程一定很简单??

4

7 回答 7

17

实际上,这很容易。我会给你最基本的,你可以修改以适应。

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

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

于 2009-10-09T19:50:55.967 回答
12

使用strace进行系统调用和使用ltrace进行库调用以查看跟踪而不是使用 gdb 怎么样? 用于系统调用的strace和用于库调用的ltrace适用于任何应用程序,即使您没有源代码。

如果您有权访问源代码,那么您还可以使用自己的代码进行跟踪。Gcc 有一个允许你这样做的模式。这是一个例子

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

如果你想使用普通的 GDB,那么你可以使用断点命令列表

您可以为任何断点(或观察点或捕获点)提供一系列命令,以便在程序因该断点而停止时执行。例如,您可能想要打印某些表达式的值,或启用其他断点。

特别是:

例如,当 x 为正时,您可以使用断点命令在 foo 的入口处打印 x 的值。

break foo if x>0
commands
silent
printf "x is %d\n",x
cont
end
于 2009-04-18T23:32:03.600 回答
9

有一个用于使用 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.

程序(存档大小2110bytes,md5 54b583e637d19be0502ccadfa6174756):

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

它从程序中转储所有函数,并在每个函数上生成一个带有断点的 gdb 命令文件。在每个断点处,都会执行“ backtrace 2”和“ continue”(通过commands)。

这个脚本在大型项目(〜数千个函数)上相当慢,所以我在函数列表上添加了一个过滤器(通过 egrep)。这很容易。我几乎每个月都使用这个脚本。

PS:有一份 callgraph.tar.gz 的副本,用于存档.org 将从档案中删除它的情况。用于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       ...........(..
于 2009-12-30T15:33:41.370 回答
7

Fenris是您正在寻找的工具,而不是 gdb 芬里斯主页

由传奇人物Michal Zalewski撰写,正是您所寻找的。

于 2009-07-14T02:37:17.217 回答
1

这是我尝试使用 gdb python API - c - GDB 自动步进 - 自动打印行,同时自由运行?

于 2012-05-27T17:12:11.257 回答
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);
于 2014-10-20T01:44:14.957 回答
-1

AFAIK,自动化 gdb 并不容易。您可以尝试洞察力,看看少量的 tcl scritiability 是否可以帮助您。

您可以尝试使用一些期望脚本自动化 gdb/MI。

在可自动化调试器中,我发现 Sun 的 dbx 是最好的。它集成了一个“ksh”。它在linux上可用

于 2009-04-20T03:18:57.993 回答