博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将 gdb 用作函数跟踪器 (Function Tracer)
阅读量:4004 次
发布时间:2019-05-24

本文共 1434 字,大约阅读时间需要 4 分钟。

参考:

可以使用下面的脚本来把 gdb 作为一个函数跟踪器。

#!/bin/sh# Make a function call trace using GDB. This is stupid, but it should workif [ "$*" = "" ]; thenecho “usage: $0 [args]”exitfi_CMDFILE=/tmp/`basename $0`.$$_PROG=$1shiftecho "Writing GDB commands file"# Write the temporary GDB commands fileecho "set args $*" > $_CMDFILEfor i in $(nm -f posix $_PROG | awk '$2 == "T" {print $1}'); do(echo break $iecho commandecho silentecho backtrace 1echo continueecho endecho) >> $_CMDFILEdoneecho run >> $_CMDFILEecho q >> $_CMDFILE# Now do the runecho Starting GDBgdb -quiet -command=$_CMDFILE $_PROG# and clean upecho GDB run finishedrm -f $_CMDFILE
代码的简单说明:

使用 nm 获取对应程序的函数信息保存到一个临时文件里。

该临时文件会对每一个函数设置断点,并在执行到该断点时打印一下对应的 backtrace ,因为设置成1,所以就打印当前的函数位置信息。

示例如下:

$ sh gdb-trace.sh /tmp/foo

Writing GDB commands file

Starting GDB
Reading symbols from /tmp/foo...done.
Breakpoint 1 at 0x400560
Breakpoint 2 at 0x4004d0
Breakpoint 3 at 0x4005a8
Breakpoint 4 at 0x400390
Breakpoint 5 at 0x4003d0
Breakpoint 6 at 0x4004b8: file foo.c, line 5.
Breakpoint 7 at 0x4004c3: file foo.c, line 10.
#0 _init (argc=1, argv=0x7fffffffde48, envp=0x7fffffffde58) at ../sysdeps/unix/sysv/linux/x86_64/../init-first.c:53
#0 0x00000000004003d0 in _start ()
#0 0x00000000004004d0 in __libc_csu_init ()
#0 0x0000000000400390 in _init ()
#0 main () at foo.c:10
#0 foo () at foo.c:5
#0 0x00000000004005a8 in _fini ()
[Inferior 1 (process 31474) exited normally]
GDB run finished

转载地址:http://yygyi.baihongyu.com/

你可能感兴趣的文章
Struts2中配置Servlet详解
查看>>
weblogic10和hibernate3 冲突解决方案
查看>>
WebLogic部署SSH2项目的小结
查看>>
JS+Struts2多文件上传完整示例
查看>>
Hibernate中DetachedCriteria的使用
查看>>
ORM是什么?
查看>>
关于Hibernate的一些常规问题
查看>>
Oracle中视图的创建和处理方法
查看>>
在Hibernate应用中使用视图
查看>>
MyEclipse 8.6 特性,安装与优化
查看>>
Oracle 查询并删除重复记录的SQL语句
查看>>
OnGestureListener的一些体会
查看>>
完全精通java输入输出流
查看>>
Spring与weblogic jndi集成
查看>>
android签名
查看>>
Ruby环境搭建与hello world
查看>>
rails中的form表单总结
查看>>
dip,px,pt,sp 的区别
查看>>
关于做android+J2ee系统集成开发的一点心得
查看>>
Hibernate事务和并发控制
查看>>