• 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 

  • 相关阅读:
    4.7字符串
    4.5 基本类型和运算符
    4.4 变量
    4.6 字符串
    hp
    openstack newton linuxbridge 改成 ovs
    理解裸机部署过程ironic
    csredis base usage
    redisclient can not connect
    Linux Install redis
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2535503.html
Copyright © 2020-2023  润新知