Questions tagged «strace»

strace是一个调试实用程序,用于在Linux下跟踪系统调用和信号。

5
列出程序访问的文件
time 如果您想弄清楚给定命令需要多少CPU时间,这是一个很棒的命令。 我正在寻找类似的东西,可以列出程序及其子级正在访问的文件。实时或事后报告。 目前,我使用: #!/bin/bash strace -ff -e trace=file "$@" 2>&1 | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print' 但如果运行命令涉及则失败sudo。它不是很智能(如果它只能列出现有文件或存在权限问题的文件,或者将它们分为读取的文件和写入的文件,那将很好。)strace速度也很慢,因此选择较快的方法会很好。

1
成功连接到IP 0.0.0.0。怎么样?为什么?
我们正在localhost上提供端口,并希望在另一个过程中检查该端口是否可用。由于我们代码中的错误,它实际上试图连接到IP 0.0.0.0:<port>,并且由于某种原因它成功-strace证明: [...] connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0 [...] 这是什么意思?为什么行得通?
41 networking  tcp  strace 

1
管道跟踪到grep
我正在尝试运行strace低谷ccze,并且管道无法按预期工作。 我正在测试的命令行是sudo strace -p $(pgrep apache2) | grep open,并且所有行都输出,忽略了grep。 是否有strace引起这种现象的特殊现象?


1
跟踪没有读取权限的可执行文件
strace在可执行文件上使用时,我在Ubuntu 14.04上发现了一些令人惊讶的行为,但我没有读取权限。我想知道这是否是错误,还是某些标准规定了这种晦涩的行为。 首先,让我们看看当我在后台启动普通可执行文件并将其附加时会发生什么。正如预期的那样: $ /bin/sleep 100 & [2] 8078 $ strace -p 8078 Process 8078 attached restart_syscall(<... resuming interrupted call ...> 接下来,我尝试一个可执行文件,该文件没有读取权限: ---x--x--x 1 root root 26280 Sep 3 09:37 sleep* 不允许附加到此运行进程: $ ./sleep 100 & [1] 8089 $ strace -p 8089 strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted 这也是我所期望的。如果我可以简单地将调试器附加到进程中并以这种方式有效地拥有对可执行文件的读取权限,那么在没有读取权限的情况下授予执行权限不会有什么好处。 …

4
如何跟踪命令的网络活动?
我想跟踪命令的网络活动,我尝试了tcpdump和strace失败。 例如,如果我要安装软件包或使用任何尝试访问某个站点的命令,则要查看该网络活动(它尝试访问的站点)。 我想我们可以使用tcpdump做到这一点。我尝试过,但是它正在跟踪系统的所有网络活动。假设如果我运行多个与网络相关的命令,并且只想跟踪特定的命令网络活动,那么很难找到确切的解决方案。 有没有办法做到这一点? 更新: 我不想跟踪网络接口上的所有内容。我只想跟踪命令(例如#yum install -y vim)的网络活动。例如它尝试到达的站点。

1
名为“ test”的可执行文件位于$ PATH中,但不会运行
我在$ HOME / bin中有一个文件(在您询问之前,是的,它在我的路径中)test,我已经确认可以在使用文件的完整路径运行该文件时执行该文件。但是,如果不这样运行,就会遇到一个非常奇怪的问题。当我只test在终端中运行时,它什么也不做,并立即返回。我知道,由于以下几个原因,这不是查找文件的问题: 没有错误信息。通常,如果找不到或无法执行该文件,则会显示一条消息,提示您。 运行which test仍会返回正确的文件路径。 可能是所有方法中最怪异的-运行脚本时,脚本工作正常strace。我尝试使用strace看看是否可以弄清楚发生了什么,但是当我使用进行运行时strace,它按预期运行了0个问题。

3
是否可以将内置命令跟踪到Bash?
受题为:内置命令何时加载到内存的启发,在尝试回答此问题时,我尝试了以下命令,但由于无法运行而感到有些惊讶: $ strace cd $HOME 有什么我可以利用的方法来为sash的内置命令运行strace吗?
13 bash  debugging  strace 

1
Bash尝试编写两个shell提示?
我正在查看连接到终端的正在运行的bash进程的strace输出,以进行教学。 我的bash进程具有PID 2883。 我输入 [OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace 进入终端。然后,我进入bash流程,并进行以下交互: [OP@localhost ~]$ ls 看输出,我看到 strace: Process 2883 attached read(0, "l", 1) = 1 write(2, "l", 1) = 1 read(0, "s", 1) = 1 write(2, "s", 1) = 1 read(0, "\r", 1) = 1 write(2, "\n", 1) …
11 bash  tty  strace 

1
为什么strace不显示该过程正在等待某些东西?
强大的力量strace让我失望了。这怎么可能? time foo显示foo运行需要几秒钟(“真实”),但在用户空间(“用户”)和内核(“ sys”)中使用的CPU时间都可以忽略不计。对于好奇,foo定义如下。 因此,它花费大部分时间等待其他事情,而不是执行CPU指令。正常情况下,我可以看到它的等待状态strace-即哪个系统调用长时间处于阻塞状态。不幸的是,这种方法行不通。 strace -ttt -T -C -w foo显示系统调用,时间戳和系统调用所花费的(实际)时间的摘要。但是,此特定过程显示出在系统调用内花费的总(实际)时间微不足道。 foo实际上是journalctl -b -u dev-hugepages.mount。除非我每次都必须将最后一个参数更改为一个不同的systemd单元,以便重现此参数。换句话说,我正在调查的延迟是在我第一次尝试获取任何一个systemd单元的日志时发生的。 编辑:在回答了主要问题之后,我还意识到我遇到这个问题会导致延迟的原因。 此过程花费的时间是一个特定的问题,显然并非在所有系统上都发生。https://github.com/systemd/systemd/issues/7963


2
在特定时间段内运行strace
如何在特定时间段(例如1分钟)内在用户进程上运行strace,而不终止用户进程并且不使用Ctrl + C? 我想创建一个脚本来自动化用户进程的跟踪执行。
9 strace 

6
为什么strace忽略我的rm别名?
我alias有一套rm命令。如果我运行alias命令,这就是我得到的输出。 alias rm='rm -i' 现在,当我运行rm命令时,它可以按预期运行。 rm ramesh rm: remove regular empty file `ramesh'? y 现在,我正在学习执行命令时正在调用的系统调用。为此,我strace从这里了解了命令,该命令列出了我在执行某些命令时正在调用的文件。命令如下。 strace -ff -e trace=file rm ramesh 2>&1 该命令工作正常,只是它会忽略为该rm命令准备的别名。它删除文件而不会提示用户。 那么,是否strace忽略这样的别名?如果是这样,为什么呢? 编辑: 不知道,这是否有帮助,但type -a rm输出为: rm is aliased to `rm -i' rm is /bin/rm 那么,是否考虑/bin/rm这种情况,这就是为什么在删除之前不提示用户的原因?
8 alias  strace 

2
如何确定流程正在执行哪些指令?
我知道strace和ltrace,但这仅告诉我进程正在执行的系统调用和库调用。我想确切地知道流程正在执行什么指令。可能是汇编,也可能是C与汇编之间的某种中间立场。假定二进制文件未使用调试符号进行编译,因此更可能选择第一个选项。 用例:进程似乎已挂起,strace或ltrace没有输出。确定过程是否在做“某事”。我意识到这可能很难确定,因为我想这类似于解决暂停问题。但是,有可能收集有用的数据。 第二个用例:好奇心。将整个汇编指令列表转储到文本列表中会很有趣。 我的猜测是我可以使用gdb来执行此操作,但不确定如何执行此操作,因为这与调试我编写的程序有关,而与使用gdb来检查正在运行的进程的运行状况有关。 操作系统是CentOS 6。

4
运行strace如何解决我的OpenGL问题?
自从最近对我的发行版(PLD Linux)进行重大升级以来,我一直在处理大量程序。据我所知,任何涉及OpenGL或PulseAudio段错误的内容。我正在使用专有的nvidia驱动程序和3.2.x内核。Xorg本身运行良好,我能够运行大多数程序,但是mplayer segfault之类的东西并且任何程序都不会发出声音。 一旦确定它可能与OpenGL有关,便开始glxgears进行测试。单独运行它会立即出现段错误。然后我发现在下运行它strace很好。同样的道理对于mplayer。立即在测试mp3文件segfault上运行它,运行strace mplayer播放就很好了(尽管脉冲音频仍然消亡,并且它恢复为虚拟输出设备)。 如何在某些情况下运行某些东西以strace防止它出现段错误,我将如何继续调试情况?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.