调试

在开始前细说前,了解一下进程的状态

符号 说明
D (TASK_UNINTERRUPTIBLE) 不可中断的睡眠状态。
R (TASK_RUNNING) 进程执行中。
S (TASK_INTERRUPTIBLE) 可中断的睡眠状态。
T (TASK_STOPPED) 暂停状态。
t (TASK_TRACED) 进程被追踪。
w (TASK_PAGING) 进程调页中,2.6以上版本的内核中已经被移除。
X (TASK_DEAD – EXIT_DEAD) 退出状态,进程即将被销毁。
Z (TASK_DEAD – EXIT_ZOMBIE) 退出状态,进程成为僵尸进程。

原文link

png

其他的就只能靠自行google

下面尝试一下gdb后进程的状态差异:

/lib/x86_64-linux-gnu/ld-2.31.so /bin/ln -s /lib/x86_64-linux-gnu/ld-2.31.so /lib64/ld-linux-x86-64.so.2

ptrace

ptrace函数是Linux内核提供的一个用于进程跟踪的系统调用,通过它,一个进程(gdb)可以读写另外一个进程(hello)的指令空间、数据空间、堆栈和寄存器的值。而且gdb进程接管了hello进程的所有信号,也就是说系统向hello进程发送的所有信号,都被gdb进程接收到,这样一来,hello进程的执行就被gdb控制了,从而达到调试的目的。

pstree