目录
前言
上文通过strace trace它自个看到了strace的原理:确实是调用了ptrace函数实现的。今天我们再细看一看。
strace与gdb的冲突
既然它两底层都是用ptrace,那么一定不能同时用在同一个进程上。实例验证:
[root]# strace sleep 1000000
...
nanosleep({tv_sec=1000000, tv_nsec=0},
#####阻塞在sleep, 方便我们有机会用gdb尝试attach它#########
启动另外一个session,
[root]# ps -ef|grep sleep
root 1463460 1462937 0 21:12 pts/1 00:00:00 strace sleep 1000000
root 1463463 1463460 0 21:12 pts/1 00:00:00 sleep 1000000
root 1463471 1038 0 21:12 ? 00:00:00 sleep 60
[root]# gdb -p 1463463
GNU gdb (GDB) Red Hat Enterprise Linux 8.2-19.el8
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to