调试工具 - 调用跟踪 - strace,ltrace

说明

  • 在开发中,经常会遇到程序运行结果和预期结果不同,需要加打印来跟踪代码的执行情况,但是依然不清楚程序真正做了些什么,为了解决这个问题,我们可以使用strace和ltrace工具来跟踪程序执行。
  • strace 可以跟踪程序的系统调用,以文本形式输出系统调用的名字,参数和返回值。
  • ltrace 可以跟踪应用层库函数的调用,以文本形式输出系统调用的名字,参数和返回值。

分析

  1. strace和ltrace跟踪的是接口的调用,如果程序是调用出错,可以很快的借助strace和ltrace定位问题,但是如果是应用层问题,例如:空指针,内存错误,strace和ltrace就帮不了什么忙了。
  2. strace和ltrace可以清晰的看到程序做了什么,因此可以解决一些疑难杂症。
  3. strace和ltrace可以记录每个调用所消耗的时间和顺序,可以帮助人们做些性能优化。

基本使用

  1. strace和ltrace都是独立的程序,不需要编写额外的代码,也不会影响程序的运行。
  2. 可以将程序作为工具的参数,也可以将工具附加到进程中。

简单使用

strace ./program 

结果重定向

  • 使用以下命令,我们将使用strace对以上程序进行跟踪,并将结果重定向至main.strace文件:
lx@LX:~$ strace -o main.strace ./main  
  • 注意: -o main.strace 只能写在starce 后面,不然会被当做 main 程序的参数

调用信息统计

strace -c ./example

附加到已运行进程

strace -p 100 //进程pid

你可能感兴趣的:(#,程序调试)