Articles of strace

为什么STRACE显示EAGAIN(资源暂时不可用)

以下是我得到的序列 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 7 setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(7, SOL_SOCKET, SO_SNDBUF, [32120], 4) = 0 getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064835312], [4]) = 0 setsockopt(7, SOL_SOCKET, SO_SNDBUF, [64240], 4) = 0 getsockopt(7, SOL_SOCKET, SO_SNDBUF, [30064899552], [4]) = 0 stat("/etc/localtime", {st_dev=makedev(8, 1), st_ino=229001, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=8, st_size=265, st_atime=2013/07/15-06:30:03, st_mtime=2012/06/25-23:46:43, st_ctime=2012/06/25-23:46:43}) […]

在共享库的构build选项中添加“-rpath,/ usr / lib”会导致段错误

我有一个你好世界计划。 #include <stdio.h> #include <stdlib.h> int main() { printf("hello world! \n"); return 0; } 我在链接阶段的程序-lmicroxml中添加-lmicroxml以链接到库libmicroxml.so 当我启动我的程序时,我得到了一个分段错误。 分段故障与libmicroxml.so的加载有关。 在我的helleo世界计划执行的strace之后: strace ./test execve("./test", ["./test"], [/* 11 vars */]) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x777de000 stat("/etc/ld.so.cache", 0x7f944760) = -1 ENOENT (No such file or directory) open("/lib/libmicroxml.so.1", O_RDONLY) = -1 ENOENT (No such file or […]

轮询系统调用超时

附加strace显示了很多这些消息: poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout) poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout) poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout) poll([{fd=5, events=POLLIN}, {fd=6, […]

即使在大括号中,也可以用strace显示完整的参数

我知道-s选项应该显示更长的参数,但它并不总是工作(可能是因为那些花括号意味着数组或嵌套参数?)。 即使在运行strace -s1000 my_command该参数仍然被截断: ioctl(3,SNDCTL_TMR_TEMPO或TCGETA,{B9600 -opost -isig -icanon -echo …})= 0 我怎样才能看到完整的论点?

如何在Linux中跟踪每个文件的IO操作?

我需要跟踪read特定文件的系统调用,而我目前正在通过parsingstrace的输出来做到这一点。 由于read操作文件描述符,我必须跟踪fd和path之间的当前映射。 另外,必须监视seek以保持跟踪中当前位置的最新状态。 在Linux中有更好的方法来获得每个应用程序,每个文件path的IO跟踪吗?

如何解释strace输出?

我需要描述我正在使用strace的应用程序的性能。 但是,我真的不知道如何解释strace发出的各种系统调用。 其中几个例子如下: (A) lseek(3, 1600, SEEK_SET) = 1600 (B) write(3, "G_DATA 300 0 "…, 800) = 800 (C) close(3) = 0 (D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000 (E) munmap(0x2b600b179000, 4096) = 0 (F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, …}) = 0 如果有人能简单地用简单的英语来解释从(A)到(F)这些行在I / O,数据传输,performance的意义等方面的真正含义,我将不胜感激。 我经历了一大堆,但还是不太自信。 如果你有任何其他的指针让我阅读,那就太好了。 我对操作系统有一些背景知识,并了解系统调用,内存,虚拟内存,调度等等。

ltrace相当于osx?

osx有非常强大的dtrace / ktrace / dtruss工具 – 但是我不愿意花时间学习处理它们的时间。 在OSX上获得linux ltrace(可能是strace)的等价function最简单的方法是什么?

如何拦截linux信号? (在C)

我需要拦截和跟踪来自任何二进制文件的信号,比如strace在linux下。 我不需要像真正的strace那样输出如此冗长的输出。 我只是想知道它是如何工作的,我怎样才能拦截信号,怎样才能追踪它们。 提前致谢 :)

当程序打开特定文件时gdb中断

背后的故事:在strace下运行程序时,我注意到'/ dev / urandom'正在被open 。 我想知道这个调用来自哪里(这不是程序本身的一部分,它是系统的一部分)。 所以,使用gdb,我打算catch syscall open (使用catch syscall open )程序执行时, open调用发出,所以我可以看到一个回溯。 问题是open被称为很多 ,像几百倍,所以我不能缩小打开/ dev / urandom的具体调用。 我应该如何去缩小具体的电话? 有没有一种方法来过滤参数,如果是的话,我怎么做一个系统调用? 任何build议都会有所帮助 – 也许我正在做的这一切都是错误的。

如何使用strace跟踪subprocess?

我用strace简单地附加到一个过程。 该进程创build了90个线程。 当我发现有问题的线程时,我不得不单调地search父线程,然后是祖父线程,一直到根进程。 有没有一个技巧或工具来快速找出哪个线程创build另一个线程? 或者更好的是,像pstree一样打印线程创build树?