问题标签 [strace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gawk - gawk : 从特殊符号中提取数据
我正在尝试从 strace -T 获取总时间,报告为:
pid 命令 [时间]
(对于每个系统调用)
现在我想总结 [time] 。我正在使用 gawk,并且我知道可以使用 $NF 访问最后一个字段。但是, $NF 报告 [time] (带括号)而不仅仅是时间,我显然无法总结,所以我要问的是如何获得 time 而不是 [time] ?
谢谢
linux - 防止 strace 缩写参数?
我正在尝试使用 strace 来找出程序使用execve
. 这些命令中的一些参数很长,并且 strace 将参数缩写为execve
(我在大约 30 个字符后看到“...”),使我无法获得任何有用的信息。如何获取每个参数的全文?
我已经阅读了手册页。-v 选项打印环境,这很有用,但参数仍然被截断。
我也尝试传递verbose=all,但这只是提供了一些关于SIGCHLD 的额外信息。
linux-kernel - 跟踪对 pull_task() 的调用以获取正在运行的进程
我正在尝试计算系统中进程调用 pull_task() 的次数。pull_task() 是一个调度函数,将任务从繁忙 CPU 的运行队列移动到空闲 CPU 的运行队列。我找不到任何简单的机制(包括 perf top)来解决这个问题。
系统中有一个叫做migration的根进程,我预感这个进程可能负责调用pull_task()。但我也无法将 strace 附加到此过程,它会引发以下错误:
附加:ptrace(PTRACE_ATTACH,...):不允许操作。
进程“迁移”的优先级是实时的。也许这就是为什么 strace 不能附加到它的原因?
好心提醒。谢谢。
c - ltrace 和 strace 工具中的行号信息
是否可以查看行号和文件名(对于使用 ltrace/strace 运行的程序)以及库调用/系统调用信息。
例如:
ltrace 或任何其他工具: malloc(20) :: code.c::21
我已经尝试了 ltrace/strace 的所有选项,但无法找到获取此信息的方法。
如果不能通过 ltrace/strace,我们是否有任何适用于 GNU/Linux 的并行工具选项?
bash - 如何通过 strace 将多个带空格的文件名传递给命令?
我有一个使用 strace、cp、awk 和 stat 的脚本来创建一个带有进度条的 cp。这是调用cp的代码部分:
问题是,我不能用空格复制任何东西。我应该如何修改这个脚本以便它可以使用空格?谢谢
编辑:这是输出:
看到第一个了吗?这工作正常,执行cp -- q file
. 现在,下一个,cp -- q 'file\' 'with\' spaces
我该如何解决?
strace - strace 如何连接到已经运行的进程?
我知道strace
用来ptrace
做这项工作,
但它需要运行目标进程TRACE_ME
,
这不适用于已经运行的进程的情况。
它如何在已经运行的进程上工作?
c - strace 如何解释系统调用参数?
我知道它ptrace
用于实现,
它可以在寄存器中获取参数,
但它们只是数字,
strace 如何将它们转换为文字信息?
它只是每个系统调用的硬代码吗?
linux - TCP 消息被合并
我有一个正在写入网络的 Java 应用程序。它正在 764b +/- 5b 的区域内写入消息。pcap 显示流正在被 IP 分段,我们无法解释这一点。
Linux 2.6.18-238.1.1.el5
一个 strace 显示:
( strace -vvvv -f -tt -o strace.out -e trace=network -p $PID )
我在捕获网络时看到大于 MTU 的数据包,这导致了碎片。
问题:
1) 似乎服务器试图将两个 sendto() 批处理到一个 IP 数据包中,该数据包大于 MTU,因此变得碎片化。为什么?
2) 查看 PID 2046 的 strace 输出,等号 <... sendto resumed> 行之后的数字是发送的总数吗?即第 3 行和第 5 行总共发送了 764b?还是每行发送 764 个字节?
3) 是否有任何选项可以传递给 strace 以记录所有sendto() 输出?好像什么都找不到。。
c++ - C++ Linux 多线程瓶颈。strace -f : `[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0`
我有一个并行化的 C++ 程序,可以进行蛮力优化。出于某种原因,我每核心的收益递减最多约 6 个核心,此时我撞到了一堵墙,进一步的核心增加了〜没有速度。这在 8 或 16 核机器上运行时是一致的。
当我运行时,strace -f ./progname
我会得到一大堆在程序的多线程部分特别发生的以下内容:[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0
以及其中一些一个接一个发生的事件:[pid 2645] mprotect(0x7ffe78030000, 4096, PROT_READ|PROT_WRITE <unfinished ...>
-[pid 2646] <... mprotect resumed> ) = 0
他们并不总是来自同一个pid
。
当我减少核心数量时,我收到的上述消息较少,而在 2 或 3 个核心时,我没有收到任何消息。
我唯一能猜到的是,这可能与大量的向量分配和在每个线程中完成的访问有关。如果相关,我不会使用任何其他内存管理库。
linux - 通过系统调用监控 linux 上的内存
我一直在寻找一种方法来测量 Linux 上的内存使用情况。我发现了三种主要的方法,我不确定我应该使用什么,因此我在这里征求意见。
监视内存的最普遍且可能更简单的方法似乎是读取 /proc/pid/status 并读取适当的字段
VmSize
,VmData
或其他任何内容。这就是程序 ps、to、vmstat 设法收集这些信息的方式(我的意思是,监控 /proc/pid/...)。该信息将提供即时信息。我可以调用一个 fork,然后调用一个 exec 来运行我想要监控的程序,然后 wait4 来填充一个 rusage 结构。从那里我可以读取所需的字段。似乎在 Linux 中,wait4 不填充 rsusage 结构中的内存字段,而只填充与 cpu 使用相关的字段。这是 time 命令获取其信息的方式。
我可以更改 strace 代码,以跟踪所有后续的 brk、mmap、munmap 系统调用,并汇总以获得堆大小。这里的困难是解码所有可能的只读、读|写、执行等的 mmap 参数,并测试返回值以了解系统是否成功。
对于 3),您认为我可以通过这种方式测量内存使用情况吗?会不会太难了?我对 strace 代码有很好的理解,但我从记忆中理解得不够,不知道这是否可能。