标签: strace

怎么应该使用strace?

一位同事曾告诉我,当Linux上的所有内容都无法调试时,最后一个选项是使用strace.

我试图学习这个奇怪工具背后的科学,但我不是系统管理大师,我没有真正得到结果.

所以,

  • 究竟是什么,它做了什么?
  • 如何以及在何种情况下使用它?
  • 如何理解和处理输出?

简而言之,简单来说,这些东西是如何工作的?

linux debugging strace

266
推荐指数
8
解决办法
27万
查看次数

相当于mac os X上的strace -feopen <command>

这对于调试很有用(因此编程相关).在linux上,我们可以使用该命令

strace -feopen python myfile.py
Run Code Online (Sandbox Code Playgroud)

找出加载了哪些python模块和共享对象.macOS X上有一个等效的单行程吗?

macos dtrace strace osx-snow-leopard

126
推荐指数
1
解决办法
5万
查看次数

防止直言不讳的争论?

我正在尝试使用strace来找出程序执行的命令execve.这些命令中的一些参数很长,并且strace缩写了execve(我在大约30个字符后看到"......")的参数,阻止我获取任何有用的信息.我怎样才能得到每个论点的全文?

我已经阅读了手册页.-v选项打印环境,这很有用,但参数仍然被截断.

strace -f -e trace=execve -v -p 1234
Run Code Online (Sandbox Code Playgroud)

我也试过传递verbose = all,但这只是提供了一些关于SIGCHLD的额外信息.

strace -f -e verbose=all trace=execve -v -p 1234
Run Code Online (Sandbox Code Playgroud)

linux strace

110
推荐指数
1
解决办法
4万
查看次数

如何使用strace跟踪子进程?

我曾经strace简要地附上过程.该过程创建了90个线程.当我找到有问题的线程时,我不得不繁琐地搜索父线程,然后是祖父母线程,等等一直到根进程.

有没有一个技巧或工具可以快速找出哪个线程创建了另一个?或者更好的是,打印线程创建树pstree如何?

linux multithreading strace

94
推荐指数
3
解决办法
7万
查看次数

适用于Windows的Systrace

我正在寻找一个Windows等效的Systrace或至少strace.我知道 StraceNT,但想知道是否还有其他选择.具体来说,我正在寻找一种以编程方式强制执行系统调用策略的特定方法,尽管这可以在事实之后而不是主动停止它们.

目前有一个很好的方法吗?

windows strace

79
推荐指数
5
解决办法
8万
查看次数

如何让dtrace以非root权限运行跟踪命令?

OS X缺少linux strace,但它dtrace本来应该是更好的.

但是,我错过了对单个命令进行简单跟踪的功能.例如,在linux上我可以写入strace -f gcc hello.ccaputre所有系统调用,它给出了编译器编译程序所需的所有文件名列表(优秀的memoize脚本是基于这个技巧)

我想在mac上移植memoize,所以我需要一些strace.我真正需要的是gcc读取和写入文件的列表,所以我需要的更多是一个truss.我当然可以说dtruss -f gcc hello.c并获得一些相同的功能,但随后编译器运行root权限,这显然是不可取的(除了大量的安全风险,一个问题是该a.out文件现在由root拥有:-)

然后我尝试了dtruss -f sudo -u myusername gcc hello.c,但这感觉有点不对,并且无论如何都不起作用(a.out这次我得不到文件,不知道为什么)

所有长篇故事都试图激发我的原始问题:如何dtrace使用普通用户权限运行我的命令,就像strace在linux中一样?

编辑:似乎我不是唯一一个想知道如何做到这一点:问题#1204256与我的几乎相同(并且具有相同的次优sudo答案:-)

macos dtrace root strace

56
推荐指数
4
解决办法
2万
查看次数

在尝试将GDB附加到进程时如何解决"ptrace操作不允许"?

我正在尝试使用gdb附加程序,但它返回给我:

附加到进程29139无法附加到进程.如果您的uid与目标进程的uid匹配,请检查/ proc/sys/kernel/yama/ptrace_scope的设置,或以root用户身份再次尝试.有关更多详细信息,请参阅/etc/sysctl.d/10-ptrace.conf ptrace:不允许操作.

edb-debugger返回"无法附加到进程,请检查权限,然后重试."

strace返回"attach:ptrace(PTRACE_ATTACH,...):不允许操作"

我将"kernel.yama.ptrace_scope"1更改为0并将"/ proc/sys/kernel/yama/ptrace_scope"1更改为0并尝试使用以下方法设置"set environment LD_PRELOAD =./ ptrace.so":

#include <stdio.h>
int ptrace(int i, int j, int k, int l) {
    printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它仍然返回相同的错误.我如何将它附加到调试器?

c linux debugging gdb strace

56
推荐指数
8
解决办法
5万
查看次数

如何在Mac OS X中跟踪程序的系统调用

我想跟踪find命令发出的系统调用来调试一些性能问题但是我无法弄清楚如何在Mac OS X Yosemite上执行此操作.我如何跟踪任意程序的系统调用,类似于FreeBSD上的strace?我对跟踪文件系统相关的调用特别感兴趣.

macos strace

37
推荐指数
3
解决办法
3万
查看次数

strace如何连接到已经运行的进程?

我知道strace使用ptrace做的工作,

但它需要运行目标进程TRACE_ME,

不适用于已经运行的流程的情况.

它如何在已经运行的进程上工作?

strace

30
推荐指数
2
解决办法
4万
查看次数

努力附加到多线程进程

如果我想要一个多线程进程(所有线程),我应该怎么做?

我知道可以做strace -f跟随分叉进程吗?但是当我开始打算时,如何附加到已经是多线程的进程呢?是一种告诉strace跟踪属于该进程的所有线程的所有系统调用的方法吗?

linux strace

29
推荐指数
2
解决办法
3万
查看次数

标签 统计

strace ×10

linux ×5

macos ×3

debugging ×2

dtrace ×2

c ×1

gdb ×1

multithreading ×1

osx-snow-leopard ×1

root ×1

windows ×1