在Linux上,是否存在与-T Solaris实用程序的-U和truss选项相当的功能。
它们指定一个系统调用(-T)或库函数(-U),当被跟踪的应用程序调用时,它们将导致它停止。
或者,换句话说,我希望在执行给定的系统调用或给定的共享库函数调用时,停止由跟踪应用程序启动的任何进程(就像被SIGSTOP终止一样)。
Linux上的strace和ltrace提供了Solaris truss的大部分功能重置,但它们似乎并没有这么做。
例如:
truss -f -T open cmd将类似于strace -f cmd,只是如果执行cmd的进程或其后代执行任何open系统调用,它将立即停止(我可以在方便的情况下稍后继续)。
在某些情况下,我可以使用gdb的S catch syscall,但我正在寻找一种解决方案,它可以方便地遵循分叉,继续对所有的分叉过程进行操作,即使在execves之后也能继续这样做。
我似乎记得有一些实用程序提供了相同的功能,甚至在某些syscall远程应用程序之间提供了一个(或该实用程序的选项)的功能,但是我的内存出现了问题,我甚至不能确定它是否在Linux上。
发布于 2013-07-12 21:03:03
据我所知,这不能用strace来完成,内部使用的ptrace函数在调用时执行SIGSTOP或SIGINT。
我在政政中插入了这个简单的解决方案,所以不需要编码。
如果不需要strace的所有功能,我建议的解决方案是修改管理--这是我在这里找到的在70行代码中为自己编写一段代码。
在一个简单的程序中,可以在以下代码之前添加两行:
if (wait_for_syscall(child) != 0) break;if(syscall == SYS_write)
do {
char str[4];
gets(str); // waits until enter to continue
} while(0);我没有试过这些,这些最后的步骤都留给你了。
发布于 2013-08-19 11:48:16
Systemtap应该能够完成您想要的操作,这是一个很好的指南:
https://access.redhat.com/site/documentation/en-US/Red_帽子_企业_Linux/5/html/SystemTap_初学者_指南/指南
https://unix.stackexchange.com/questions/80249
复制相似问题