Linux GDB连接到PID-无法访问内存地址

Linux GDB连接到PID-无法访问内存地址,linux,debugging,gdb,casperjs,Linux,Debugging,Gdb,Casperjs,我正在尝试检查服务器上已“挂起”的进程。我使用gdb附加到流程中,如下所示: gdb -p PID 在gdb内部,我运行bt并获得以下信息: (gdb) bt #0 0x00007f57f4be73ba in __getpwuid_r (uid=4113672712, resbuf=0x7f57f531ce40, buffer=0x1 <error: Cannot access memory at address 0x1>, buflen=0, result=0x7f5

我正在尝试检查服务器上已“挂起”的进程。我使用gdb附加到流程中,如下所示:

gdb -p PID
在gdb内部,我运行
bt
并获得以下信息:

(gdb) bt
#0  0x00007f57f4be73ba in __getpwuid_r (uid=4113672712, resbuf=0x7f57f531ce40, buffer=0x1 <error: Cannot access memory at address 0x1>, buflen=0, 
    result=0x7f57f531a048) at ../nss/getXXbyYY_r.c:198
#1  0x00007f5700000004 in ?? ()
#2  0x0000000000000060 in ?? ()
#3  0x0000000000000001 in ?? ()
#4  0x00007f5700000031 in ?? ()
#5  0x0000000000000000 in ?? ()
(gdb)bt
#0 0x00007F57F47BE73BA在uuu getpwuid_ur中(uid=4113672712,resbuf=0x7f57f531ce40,buffer=0x1,buflen=0,
结果=0x7f57f531a048)在../nss/getXXbyYY_r.c:198
#1 0x00007F57000004英寸??()
#2 0x0000000000000060英寸??()
#3 0x0000000000000001英寸??()
#4 0x00007F57000031英寸??()
#5 0x0000000000000000英寸??()
无法访问内存地址
是否是导致此进程挂起的潜在原因?或者这是否意味着软件已经退出,但仍有一个正在运行的进程

这是一个CasperJS脚本

无法访问内存地址是否是导致此进程挂起的潜在原因

没有

很可能您的整个堆栈都是假的,并且您的进程根本不在
\uuu getpwuid\ur

一种可能发生这种情况的方法是更新系统库,但尚未重新启动进程。GDB然后查看当前安装的系统库,这些库与进程实际使用的副本不匹配

您可以通过在
/proc/$PID/maps
中查找“(已删除)”条目来证明这一点


如果确实是这样,那么在获得正确的堆栈跟踪之前,您必须安排GDB查看系统库的旧版本(进程启动时的当前版本)。可能有助于安装。

听起来您正在连接到应用程序的生产版本。这些可能会启用优化并删除调试符号。所以你不能完全依赖gdb告诉你的。例如,启用优化后,gdb在任何给定时间都无法使用某些变量值。因此,我的建议是保留上述信息作为数据点。但不要仅凭这些就得出坚定的结论。不幸的是,您需要进一步调试。