跟踪程序在Linux下的执行的函数调用

系统 Linux
本篇文章主要是向大家讲述了跟踪程序是如何在Linux下执行的函数调用,作者从基本概念、具体实例方面进行讲解,相信对于Linux的初学者来说会有很大的帮助!

本篇文章主要是向大家讲述了跟踪程序是如何在Linux下执行的函数调用,作者从基本概念、具体实例方面进行讲解,相信对于Linux的初学者来说会有很大的帮助!

对于一个程序,通常我们可以使用gdb之类的调用工具设定断点进行调用。然而Linux系统提供了众多的跟踪工具,可以让我们在没有源代码的情况下跟踪程序都执行了哪些系统调用、动态库调用、栈情况以及接收信号等。可以让我们不停止程序来观察程序的执行流程。

strace 显示执行程序的系统调用及接收信号情况;

strace [strace 选项]  可执行程序 可执行程序参数。

选项说明:

-o filename 将输出写到文件filename中;

-f 跟踪子进程的执行,适合多线程程序;

-ff 如果使用了-o指定输出文件,则将每个子进程都写入到filename.pid中;

-s strsize,指定最大字串大小,默认为32;

-r  打印相对时间戳;

-t  打印实际时间 -tt 打印毫秒级 -ttt 打印微秒级时间;

-x 将所有非ASCII字符串显示为十六进制字串;

-xx 将所有字符串显示为十六进制;

-P pid 附着于进程进行跟踪,并在ctrl+c后离开保持被跟踪程序执行。

-e key=[!]value[,value]或-evalue,只显示value的系统调用;

key包括trace、abbrev、verbose、raw、signal、read、write,value为系统调用的符号。

例如-e trace=open,默认使用trace=all。

为了方便使用value定义了一些不同类型的系统调用:file代表所有文件相关调用,process涉及相关进程的调用,network涉及相关网络系统调用,signal代表所有信号相关的系统调用,此外还有ipc,desc。其他的key如abbrev、verbose、raw表示使用什么样的输出方式。signal可以跟踪特定信号集的接收情况。默认为signal=ALL,可以使用SIGIO这种方式。而read/write则可以指定跟踪写特定文件描述符的动作,并将读写数据以十六进制的方式打印出来。例如-e read=3,5。

ltrace 显示执行程序的库调用及接收信号情况,其与strace的使用参数类似,支持-e -f -P -s -t -tt -tt -o -ff等参数,此外它还支持下面的一些参数:

-C --demangle 转换低级编译器的符号令用户易看,例如C++等的mangle操作;

-l --library libname,lib... 只显示对libname中的库调用;

-S 显示系统调用,-L 不显示库调用;

-n num  当嵌套调用时,进行缩进显示;

对于不同的库中的调用,列于/etc/ltrace.conf文件中。

pstack 打印命中时程序的调用栈及相应参数;

pstack pid即可。

【编辑推荐】

  1. Linux下读取Windows注册表
  2. Linux下用adb连接手机的问题解决
  3. Linux下的高精度时间获得与定时器
  4. 四步到位正确安装Arm-Linux交叉编译器
  5. Linux安装使用jprofiler6分析服务器应用状态
     
责任编辑:冯宇 来源: Linux社区
相关推荐

2012-04-16 13:47:37

JavaMatlab

2011-04-19 14:59:27

LinuxJava

2023-11-17 08:02:34

系统调用linux

2017-03-08 15:39:11

Linuxselect函数

2022-01-10 07:57:25

Linux 插桩Linux 系统

2021-03-25 14:25:24

Linux运维Linux系统

2010-01-12 11:48:59

Linuxitoa函数

2010-04-12 09:07:09

Make命令

2018-01-24 18:51:39

Linuxftrace内核函数

2009-07-22 07:44:00

Scala尾递归

2010-01-22 10:51:54

svn命令linux

2012-03-02 12:14:19

JavaJstackJmap

2009-12-09 11:45:51

SUSELinuxADSL

2023-10-26 11:39:54

Linux系统CPU

2023-03-30 15:07:57

Linux编程开发

2023-03-21 15:36:27

Linux编程

2011-01-14 14:15:11

Linux汇编语言

2011-01-14 14:22:50

Linux汇编语言

2021-04-01 11:28:44

C++ LinuxWindows

2011-05-31 09:23:24

.NET程序集
点赞
收藏

51CTO技术栈公众号