C 用GDB调试正在运行的守护进程
我想用GDB调试一个正在运行的守护进程。我有各自进程的进程id。我键入:gdb附加进程id信息线程 我正在获取线程列表。*一个是当前正在运行的线程(如果我错了,请更正我) 现在我发送: systemctl kill daemonname(我在其他终端上运行的这个命令) 现在我想检查一下,在点击这个命令之后,哪个线程正在运行 因为我的守护进程被卡住了。这不是正确的杀戮。我尝试使用服务名称状态命令。因为在上面的“servicename status”命令之后它被卡住了。我想跟踪最后一个被卡住的线程,因为我的守护进程仍然没有被杀死,但是运行命令检查守护进程的状态是被阻塞的,输出上没有输出。但如果正确终止,则应显示服务未运行或未找到命令 请帮帮我。。我是新来的 我尝试使用服务名称状态命令 你可能拿错了 执行C 用GDB调试正在运行的守护进程,c,gdb,pthreads,freeze,C,Gdb,Pthreads,Freeze,我想用GDB调试一个正在运行的守护进程。我有各自进程的进程id。我键入:gdb附加进程id信息线程 我正在获取线程列表。*一个是当前正在运行的线程(如果我错了,请更正我) 现在我发送: systemctl kill daemonname(我在其他终端上运行的这个命令) 现在我想检查一下,在点击这个命令之后,哪个线程正在运行 因为我的守护进程被卡住了。这不是正确的杀戮。我尝试使用服务名称状态命令。因为在上面的“servicename status”命令之后它被卡住了。我想跟踪最后一个被卡住的线程,
systemctl kill daemonname
后,您希望将GDB连接到进程,并查看它被卡住的位置(使用thread apply all where
)
您可能会看到线程处于死锁状态(例如,线程T1正在等待线程T2持有的互斥锁A;线程T2正在等待线程T1持有的互斥锁B)
我想追踪最后一个卡住的线程
一般来说,跟踪多线程进程是一件愚蠢的差事,因为跟踪进程的事实会改变执行环境,并且通常会导致它在没有跟踪的情况下不再匹配执行
相反,您应该考虑不变量,并确保它们没有被违反