strace相关内容

将strace命令的输出打印为文本文件

我需要将以下命令的结果写入文本文件,但此命令不起作用,并且在使用cat output.txt时不显示任何内容。 请帮我纠正这个问题好吗? strace -r -y -e read Program -l -o output.txt 谢谢 推荐答案 为了将来参考,我认为此人应该这样运行它: strace -o outputfile.txt ./Program ..
发布时间:2022-04-18 10:49:10 服务器开发

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

背景故事:在 strace 下运行程序时,我注意到 '/dev/urandom' 正在被 open'ed.我想知道这个调用来自哪里(它不是程序本身的一部分,它是系统的一部分). 所以,使用 gdb,我试图在发出 open 调用时中断(使用 catch syscall open)程序执行,因此我可以看到回溯.问题是 open 被调用了 alot,大概有几百次,所以我无法缩小打开/dev/ura ..
发布时间:2022-01-20 20:23:21 服务器开发

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

我正在尝试使用 gdb 附加一个程序,但它返回: 附加到进程 29139 无法附加到进程.如果您的 uid 与目标的 uid 匹配进程,检查/proc/sys/kernel/yama/ptrace_scope 的设置,或尝试再次以root用户身份.有关详细信息,请参阅/etc/sysctl.d/10-ptrace.conf ptrace: 不允许操作. gdb-debugger 返 ..
发布时间:2022-01-20 19:52:24 服务器开发

strace'ing java 进程时有很多 SIGSEGV

当我在 CI 服务器(实际上是 maven 构建)上调试其中一个单元测试时,发生了一些有趣的事情.我使用 strace -ff -e trace=network -p [pid] 连接到 java 进程以跟踪构建过程的网络活动.这就是我所看到的: 附加进程 26324附加进程 26325(等待父进程)进程 26325 恢复(父进程 26312 就绪)进程 26325 分离进程 26324 分离进 ..
发布时间:2022-01-12 15:44:51 Java开发

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

我想跟踪 find 命令的系统调用 调试一些性能问题 但是我不知道如何在 Mac OS X Yosemite 上做到这一点.与 strace 在 FreeBSD 上所做的类似,如何跟踪任意程序的系统调用?我对跟踪文件系统相关调用特别感兴趣. 解决方案 你可以像在 一样使用dtruss sudo dtruss find ~/repo -depth 2 -type d -name '.gi ..
发布时间:2021-12-06 21:12:56 其他开发

适用于 Windows 的 Systrace

我正在寻找一个相当于 Systrace 的 Windows 或至少strace.我知道StraceNT,但想知道是否还有其他选择那里.具体来说,我正在寻找一种以编程方式强制执行系统调用策略的特定方法,尽管这可以事后进行,而不是主动停止它们. 目前有什么好的方法可以做到这一点吗? 解决方案 WinDbg 的 Logger.exe 最接近 strace:https://docs.micr ..
发布时间:2021-09-25 19:39:28 其他开发

如何解释 PTRACE_PEEKTEXT 返回值

为了熟悉寄存器,我一直在重新编写一个小型 strace 程序,而不使用 PTRACE_SYSCALL. 所以在我使用 ptrace(PTRACE_GETREGS, ...) 设置 user_reg_struct 字段后的代码中,我使用 ptrace(PTRACE_PEEKDATA, ...) 从中读取. 我真的不知道如何处理该函数的返回值以使用它的数据(系统调用等...),我开始查看一 ..
发布时间:2021-09-04 18:43:29 服务器开发

使用 ptrace 提取系统调用名称和参数

我正在处理一项任务,其中我必须使用 ptrace 实现类似 strace 的功能.到目前为止,我已经找到了如何像这样提取系统调用号和返回值: //在父进程中struct user_regs_struct regs;ptrace( PTRACE_GETREGS, child_pid, 0, ®s );//child_pid 是执行所需程序的子进程的pid//或系统调用作为命令行参数传递sys ..
发布时间:2021-09-04 18:41:55 服务器开发

strace 是如何工作的?

它可以跟踪所有使用的系统调用. 但是 sys_call 与普通调用有什么不同?? 解决方案 正如 Matthew 所说,strace 使用 ptrace(2) 系统调用来发挥它的魔力.ptrace 用于实现调试器和其他需要检查另一个程序正在做什么的工具.本质上,strace 将调用 ptrace 并附加到目标进程. 每当目标进程进行系统调用时,它就会停止,并且会通知strace ..
发布时间:2021-09-04 18:41:19 其他开发

跟踪对共享库的调用

我正在 Linux 下开发一个程序. 出于调试目的,我想跟踪从我的程序到某个(最好是共享的)库的所有调用.(我不想跟踪库内发生的调用.) 对于系统调用,有 strace.是否有任何工具可以跟踪对共享库的调用? 解决方案 您正在寻找的工具称为 ltrace.它允许跟踪从程序到所有(或一组给定)库的任何调用. 例如,以下调用将列出对共享库加载的外部函数的任何调用: $>跟踪 ..
发布时间:2021-07-23 20:19:11 其他开发

在 Linux 上分析挂墙时间

我有一个应用程序,我想分析在各种活动中花费了多少时间.由于此应用程序是 I/O 密集型的,因此我希望得到一份报告,该报告将总结每个库/系统调用所花费的时间(挂墙时间). 我尝试过 oprofile,但它似乎在未停止的 CPU 周期(即 cputime,不是实时)方面提供了时间 我已经尝试过 strace -T,它提供了时间,但是生成的数据非常庞大,并且很难获得摘要报告(并且存在用于此的 ..
发布时间:2021-06-21 20:18:00 其他开发

strace 修复挂起的进程

我有一个单线程的 unix 进程,它通过 tcp 与其他进程通信. 问题如下.当我启动该进程时,它会挂起(没有忙循环),直到我将其杀死. 有趣的是,一旦我用 strace 附加到它,它就会继续以预期的行为运行,就好像根本没有问题一样.(始终可重现) 这种行为的原因是什么?strace 对进程的状态有什么影响? 更新:strace 改变行为的原因是,因为我们使用了带有 bug ..
发布时间:2021-06-21 19:48:14 服务器开发

如何在Linux中获取进程的进程树跟踪/日志?

我想知道脚本以什么顺序启动哪些可执行文件(并以递归方式跟踪这些可执行文件). 例如,假设我在这里有一个bash脚本(称为abc.sh): #!/bin/bashls海湾合作委员会 我想使用“跟踪/日志命令"运行此脚本,并获得如下内容: abc.sh-ls|-gcc-cpp-cc1... 等等. 这表明abc.sh称为ls和gcc.gcc依次称为cpp和cc1. 这可能吗? ..
发布时间:2021-05-29 23:03:50 服务器开发

strace如何读取系统调用sys_open的文件名?

我正在编写一个使用Ptrace并执行以下操作的程序: 它读取当前的eax并检查系统调用是否为sys_open. 如果是,那么我需要知道传递的参数是什么. int sys_open(const char *文件名,const int模式,const int掩码) 所以eax = 5表示这是一个开放系统调用 我从此问题得知ebx拥有文件位置的地址.但是如何知道文件名的长度,以便可 ..
发布时间:2021-05-29 22:57:21 服务器开发

跟踪以附加到多线程进程

如果我要跟踪(所有线程的)多线程进程,该怎么办? 我知道可以执行strace -f来执行分叉的过程吗?但是,当我开始跟踪时,如何附加到已经是多线程的进程呢?是一种告诉strace跟踪属于该进程的所有线程的所有系统调用的方法吗? 解决方案 2021更新 strace -fp PID 在我的系统上做的正确(Ubuntu 20.04.1 LTS). strace 手册页指出了这一点: ..
发布时间:2021-05-29 22:34:50 服务器开发

LD_PRELOAD和strace有什么区别?

这两种方法都用于收集系统调用以及参数并返回它们的值.当我们更喜欢LD_PRELOAD时,为什么?也许可以说我们只能通过strace收集系统调用,但是可以通过LD_PRELOAD技巧来收集库调用.但是,还有一个名称为ltrace的库的跟踪器. 解决方案 strace正在使用 LD_PRELOAD技巧使用动态加载程序,例如/lib64/ld-linux-x86-64.so.2或/lib/ld. ..
发布时间:2020-06-29 19:45:26 其他开发