gpt4 book ai didi

c - 在 Linux 中,不使用 GDB 进行实时调试,当 C 程序挂起时,如何找到它的状态?

转载 作者:太空狗 更新时间:2023-10-29 12:04:14 25 4
gpt4 key购买 nike

我们有一个古老的网络应用程序(客户端程序在一台机器上运行,服务器程序在另一台机器上运行)。它通常工作正常,但在极少数情况下会挂起。我们还没有确定到底是什么导致了挂起。这是用 C 语言编写的普通老式套接字编程。

问题是,我们无法重现这一点,它有时会发生。

当它挂起时,我该怎么做才能找出服务器和客户端程序的状态(挂起的代码块)?由于各种原因无法附加到调试器(需要立即终止程序以释放阻塞的端口)。

我刚读到有关 gcore 的内容,我会试一试。

有什么更好的主意吗?

更新:gcore(或其他生成核心转储的方法)工作得很好。

最佳答案

我熟悉的很少

提示编号 1

pstack

用法

pstack <process Id>

例如

下面是 pid 为 3258 的 bash 进程的示例

     PID TTY          TIME CMD
3258 pts/6 00:00:00 bash
3326 pts/6 00:00:00 ps


pstack 3258
#0 0x0000003ab5eaa77e in waitpid () from /lib64/libc.so.6
#1 0x000000000043ebf2 in ?? ()
#2 0x000000000043fe4f in wait_for ()
#3 0x0000000000430a59 in execute_command_internal ()
#4 0x0000000000430c4e in execute_command ()
#5 0x000000000041d536 in reader_loop ()
#6 0x000000000041ccf9 in main ()

提示编号 2

gdb attach <process id>

然后

(gdb) info threads 

很有帮助

前面提到的其他几个像 gcore , netstat 也有助于确定状态

关于c - 在 Linux 中,不使用 GDB 进行实时调试,当 C 程序挂起时,如何找到它的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20853721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com