我不知何故设法破坏我的电脑,所以当我试图使用ptrace来追踪另一个进程(例如strace,gdb)时,我立即得到了分段错误。
例如:
#strace / bin / true execve(“/ bin / true”,[“/ bin / true”],[/ * 27 vars * /])= 0 --- SIGSEGV(分段错误)@ 0(0)--- +++被SIGSEGV +++杀死
或与gdb:
#gdb / bin / true GNU gdb Fedora(6.8-27.el5) Copyright(C)2008 Free Software Foundation,Inc. 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件:您可以自由更改和重新分配它。 没有担保,在法律允许的范围内。 键入“显示复制” 和“显示保修”的细节。 这个GDB被configuration为“x86_64-redhat-linux-gnu”... (没有finddebugging符号) (gdb)运行 启动程序:/ bin / true 程序终止信号SIGSEGV,分段故障。 该程序不再存在。 如果没有进程debugging,你不能这样做。
rpm -V在strace,gdb和glibc上出现干净。 我没有设置任何LD_ *variables,PATH没有什么特别的。
更新 :用PREEMPT重新编译时,问题在kernel-2.6.18-128内核中。 该内核使用utrace基础结构模拟ptrace,似乎不同意抢占。 内核-2.6.18-164似乎修复它。
在使用CONFIG_PREEMPT重build的“Red Hat Enterprise Linux Client 5.5”内核2.6.18-194上使用时,我有同样的gdb / strace问题。
CONFIG_PREEMPT_VOLUNTARY似乎工作正常。