首页 > 其他 > 详细

strace命令入门

时间:2016-02-04 01:05:18      阅读:372      评论:0      收藏:0      [点我收藏+]

  1、strace:trace system calls and signals

  1)简介:strace拦截并记录进程调用的系统调用,以及进程收到的信号。它是一个非常有用的程序诊断和调试工具。

  2)用法:

  (1)示例1:

int main()
{
    std::cout << "hello world" << std::endl;
    return 0;
}

  编译成a.out之后,再执行strace ./a.out > /dev/null(防止a.out和strace的输出产生混淆),以下是其输出:

execve("./a.out", ["./a.out"], [/* 26 vars */]) = 0
brk(0)                                  = 0x209d000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3e10278000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
... ...
write(1, "hello world\n", 12)           = 12
exit_group(0)                           = ?
+++ exited with 0 +++

  可见,关于系统调用的每一行会打印名称、参数和返回值(出错时还有相应的出错字符串)。strace默认在标准出错上打印这些信息。

  (2)示例2:

int main()
{
    sleep(100);
    return 0;
}

  编译成a.out之后,在终端A执行;在终端B执行strace -p `pidof a.out`。在终端A上把a.out进程切到后台(Ctrl-z),再切回来(fg),可看到终端B的输出(进程收到的信号的信息):

Process 8885 attached
restart_syscall(<... resuming interrupted call ...>
) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTSTP {si_signo=SIGTSTP, si_code=SI_KERNEL, si_value={int=3722471000, ptr=0x7f6fdde06658}} ---
--- stopped by SIGTSTP ---
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=2455, si_uid=0} ---
restart_syscall(<... resuming interrupted call ...>

  strace使用-p选项attach到指定PID的进程上(多个-p可attach到多个进程)。

 

 

 

 

不断学习中。。。

strace命令入门

原文:http://www.cnblogs.com/hanerfan/p/5180833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!