我想用strace跟踪系统调用.有太多的读写,所以我想排除它们.
这是我的测试:
strace -e trace=!read ls
Run Code Online (Sandbox Code Playgroud)
我的电脑(ubuntu 14)无法运行此命令.错误消息是"!open:event not found".我仔细阅读了这个人,我无法理解为什么它失败了.
谢谢.!
当我调试CI服务器上的一个单元测试(实际上是maven构建)时发生了有趣的事情.我连接到java进程strace -ff -e trace=network -p [pid]跟踪构建过程的网络活动.这就是我所看到的:
Process 26324 attached
Process 26325 attached (waiting for parent)
Process 26325 resumed (parent 26312 ready)
Process 26325 detached
Process 26324 detached
Process 26320 detached
Process 26317 detached
Process 26308 resumed
[pid 26308] --- SIGCHLD (Child exited) @ 0 (0) ---
Process 26307 resumed
Process 26308 detached
[pid 26310] --- SIGCHLD (Child exited) @ 0 (0) ---
Process 26310 detached
[pid 25551] --- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 26309 detached …Run Code Online (Sandbox Code Playgroud) 附加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, events=POLLIN}, {fd=7, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}], 6, 0) = 0 (Timeout)
Run Code Online (Sandbox Code Playgroud)
如何找到程序尝试访问的文件导致poll系统调用超时?
strace 生成大量消息,使其难以调试
我读过一篇论文,提出了一种捕获来自特定Android应用程序的网络流量的方法.它说"我们使用tcpdump来收集来自虚拟机的所有网络流量.我们将strace实用程序移植到Android以记录执行的每个网络系统调用通过app.We使用应用程序的进程ID(pid)识别应用程序启动的所有线程.根据此线程信息,我们可以过滤掉不是来自应用程序的流量".但我仍然不知道操作原理.那么如何从特定的Android应用程序中捕获网络流量呢?感谢您的回答.
在发布了很多问题后ptrace(最近的5个问题是我的:())当我更换时,我终于得到了所需的输出
reg_val[1] = ptrace(PTRACE_PEEKDATA, child, 4 * EBX, NULL);
Run Code Online (Sandbox Code Playgroud)
同
reg_val[1] = ptrace(PTRACE_PEEKUSER, child, 4 * EBX, NULL);
Run Code Online (Sandbox Code Playgroud)
手册页中提到的差异是这样的
PTRACE_PEEKTEXT 在孩子的记忆中的位置addr读取一个单词PTRACE_PEEKUSER 在孩子的USER区域的偏移地址处读取一个单词我无法从手册页中单独理解这种差异.谁能教育我更多吗?
我跑的时候
strace -f strace /bin/ls
Run Code Online (Sandbox Code Playgroud)
知道它失败的strace工作
ptrace(PTRACE_TRACEME, 0, 0, 0) = -1 EPERM (Operation not permitted)
Run Code Online (Sandbox Code Playgroud)
即使是root帐号.
它有什么解决方案吗?
我试图使用"strace -p"附加到已经运行的JBoss进程.JBoss正在使用1.5.0_15 Java JDK.不幸的是,这不起作用 - 我只得到一个futex()结果:
# strace -p 3388
Process 3388 attached - interrupt to quit
[ Process PID=3388 runs in 32 bit mode. ]
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, 1, NULL <unfinished ...>
Run Code Online (Sandbox Code Playgroud)
Strace适用于所有其他程序,但不适用于JBoss.当我通过strace启动进程时,它似乎工作正常.当我尝试连接到已经运行的进程时,它不起作用.
我正在使用64位Linux 2.6.18和32位Java JDK(RedHat Enterprise Linux 5.3,如果重要的话).
更新#1:
我尝试用"-d"运行它,但输出似乎没有任何洞察力,至少对我来说:
[root@]# strace -d -e verbose=all -p 3388
Process 3388 attached - interrupt to quit
[wait(0x137f) = 3388]
pid 3388 stopped, [SIGSTOP]
[wait(0x57f) = 3388]
pid 3388 stopped, [SIGTRAP]
[ Process PID=3388 runs in 32 bit mode. ]
futex(0x8f18f7c, FUTEX_WAIT_PRIVATE, …Run Code Online (Sandbox Code Playgroud) 我需要跟踪read特定文件的系统调用,我目前正在通过解析输出来完成此操作strace.由于read文件描述符工作我必须保持轨道之间的当前映射的fd和path.此外,seek必须进行监控以使跟踪中的当前位置保持最新.
Linux中是否有更好的方法来获取每个应用程序,每个文件路径的IO跟踪?
使用strace可以看到ioctl调用特定文件描述符和某些命令.第三个参数是结构,但strace将其显示为指向内存的原始指针.strace输出示例:
open("/dev/node", O_RDWR) = 3
ioctl(3, 0x108, 0x8f0eb18) = 0
close(3)
Run Code Online (Sandbox Code Playgroud)
有没有办法(strace选项或其他工具)来查看结构是什么,或者至少是原始指针背后的值?
试图调试行为不端的Java VM.有问题的过程是在Centos 5上运行Sun VM 1.6u24的大型VM(100GB堆),它正在执行例行的后端工作 - 即数据库访问,文件I/O等.
重新启动进程以进行软件版本升级后,我们发现其吞吐量已显着下降.大多数时候,顶级报告称Java进程正在充分利用2个核心.在此期间,VM完全不负责任:没有写入日志,也没有响应外部工具,如jstack或kill -3.VM恢复后,该过程将按正常方式继续,直到下一次挂起.
strace显示在这些挂起期间,只有2个线程进行系统调用.这些是VM线程"VM线程"(21776)和"VM周期性任务线程"(21786).据推测,这两个线程耗尽了CPU时间.应用程序线程偶尔会唤醒并完成工作.其余的时间他们似乎在等待各种futexes.顺便提一下,正常阶段的第一行始终是SIGSEGV.
[pid 21776] sched_yield() = 0
[pid 21776] sched_yield() = 0
[pid 21776] sched_yield( <unfinished ...>
[pid 21786] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 21776] <... sched_yield resumed> ) = 0
[pid 21786] futex(0x2aabac71ef28, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 21776] sched_yield( <unfinished ...>
[pid 21786] <... futex resumed> ) = 0
[pid 21786] clock_gettime(CLOCK_MONOTONIC, {517080, 280918033}) = 0
[pid 21786] clock_gettime(CLOCK_REALTIME, {1369750039, 794028000}) = 0
[pid …Run Code Online (Sandbox Code Playgroud) strace ×10
linux ×3
c ×2
java ×2
system-calls ×2
android ×1
centos5 ×1
file-io ×1
filesystems ×1
hang ×1
jboss ×1
jvm ×1
networking ×1
permissions ×1
ptrace ×1
trace ×1
traffic ×1