zoukankan      html  css  js  c++  java
  • strace 调试linux 程序

    原文链接

    参考
    1《linux的strace命令(详解).txt》 新浪电子书可下载
    2man strace

    一个基本上通用的 完整的用法:
    strace -o output.txt -T -tt -e trace=all -p 28979
    上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。

    strace常用参数:

    -c  统计每种系统调用执行的时间、调用次数、出错次数,程序退出时给出报告

    -p pid  跟踪指定的进程,可以使用多个-p同时跟踪多个进程

    -o filename  strace默认输出到stdout,-o可以将输出写入到指定的文件

    -f  跟踪由fork产生的子进程的系统调用

    -ff  常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到各个filename.pid文件中

    -F  尝试跟踪vfork子进程系统调用,注意:与-f同时使用时, vfork不被跟踪

    -e expr  输出过滤表达式,可以过滤掉不想输出的strace结果

    -e trace=set  指定跟踪set中的系统调用

    -e trace=network  跟踪与网络有关的所有系统调用

    -e strace=signal  跟踪所有与系统信号有关的系统调用

    -e trace=ipc  跟踪所有与进程通讯有关的系统调用

    -e signal=set  指定跟踪set中的信号

    -e read=set  输出从指定文件中读出的数据,例如-e read=3,5

    -e write=set  输出写入到指定文件中的数据,例如-e write=1

    -r  打印每一个系统调用的相对时间

    -t  在输出中的每一行前加上时间信息

    -tt  在输出中的每一行前加上时间信息,时间精确到微秒级

    -ttt  在输出中的每一行前加上时间信息,输出为相对时间

    -s  指定每一行输出字符串的长度(默认为32)

    strace使用举例:

    strace -t whoami  #跟踪whoami可执行程序,每行输出结果前打印执行的时间

    strace -p 17151 -p 17152 -p 17153  #同时跟踪进程17151、17152、17153

    strace -f -e trace=read,write -p 17151 -o log  #跟踪进程17151及子进程read和write系统调用,输出到log文件



    必须记住的几个用法
    1)
    strace -p pid  可以跟踪某个后台进程

    2)
    strace -o filename 把跟踪结果输出到文件

    3)strace -T 记录每个系统调用花费的时间,可以看看哪个系统调用时间长

    4)strace -t (或者 -tt)记录每个系统调用发生是的时间(时分秒的格式)

    5)strace -s 1024 显示系统调用参数时,对于字符串显示的长度, 默认是32,如果字符串参数很长,很多信息显示不出来。

    6)strace -e trace=nanosleep 只记录相关的系统调用信息。

        -e trace=network // 只记录和网络api相关的系统调用
        -e trace=file // 只记录涉及到文件名的系统调用
        -e trace=desc // 只记录涉及到文件句柄的系统调用
        还有其他的包括process,ipc,signal等。

    一个经典的,通过strace查看一个进程所有相关打开文件的排查过程,参考《linux的strace命令(详解).txt》 新浪电子书可下载

    如果开发程序没有一个强大的工具相伴,那么开发效率会非常低,甚至遇到问题无从下手. 现在开始学习linux下的强大的调试工具strace,并记录于此.


    strace
    1)类似于windows下的processexp.exe
       可以监控系统调用
    2)类似于windows下的depand工具
       可以检查程序的依赖库. 比linux下的ldd更强大.
       参考:strace命令用法 
       http://blogimg.chinaunix.net/blog/upfile/070331234055.pdf 

  • 相关阅读:
    Smart Client Architecture and Design Guide
    Duwamish密码分析篇, Part 3
    庆贺发文100篇
    .Net Distributed Application Design Guide
    New Introduction to ASP.NET 2.0 Web Parts Framework
    SPS toplevel Site Collection Administrators and Owners
    来自Ingo Rammer先生的Email关于《Advanced .Net Remoting》
    The newsletter published by Ingo Rammer
    深度探索.Net Remoting基础架构
    信道、接收器、接收链和信道接受提供程序
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2535503.html
Copyright © 2011-2022 走看看