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

时间:2016-03-04 19:09:53

标签: 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=0x7f57f531a048) at ../nss/getXXbyYY_r.c:198
#1  0x00007f5700000004 in ?? ()
#2  0x0000000000000060 in ?? ()
#3  0x0000000000000001 in ?? ()
#4  0x00007f5700000031 in ?? ()
#5  0x0000000000000000 in ?? ()

Cannot Access Memory Address导致此进程挂起的潜在原因是什么?或者它是否意味着软件已退出但仍有运行过程?

这是一个CasperJS脚本btw。

1 个答案:

答案 0 :(得分:0)

  

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

没有

您的整个堆栈很可能是虚假的,而且您的流程根本不在__getpwuid_r内。

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

你可以通过寻找&#34;(已删除)&#34;来证明这是对此的反驳。 /proc/$PID/maps中的条目。

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