Perl 如何确定SEGFULT中涉及的库

Perl 如何确定SEGFULT中涉及的库,perl,gdb,segmentation-fault,nagios,Perl,Gdb,Segmentation Fault,Nagios,我让nagios 3.2.3在CentOS 5.7上运行,某种原因导致它出现故障。最近,许多服务器被添加到配置中,因此很难判断是什么附加指令触发了问题 然而,nagios 3.2.3软件包来自rpmforge,许多现有的perl库可能是CentOS base/updates repos,因此我预计会有一些相互冲突的库导致这种情况 在strace下运行nagios服务器二进制文件会导致以下错误: open("/usr/bin/p1.pl", O_RDONLY) = 4 ioctl(4

我让nagios 3.2.3在CentOS 5.7上运行,某种原因导致它出现故障。最近,许多服务器被添加到配置中,因此很难判断是什么附加指令触发了问题

然而,nagios 3.2.3软件包来自rpmforge,许多现有的perl库可能是CentOS base/updates repos,因此我预计会有一些相互冲突的库导致这种情况

在strace下运行nagios服务器二进制文件会导致以下错误:

open("/usr/bin/p1.pl", O_RDONLY)        = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffefee6da0) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(4, 0, SEEK_CUR)                   = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
fstat(4, {st_mode=S_IFREG|0664, st_size=31878, ...}) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
readlink("/proc/self/exe", "/usr/bin/nagios"..., 4095) = 15
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
所以我尝试过的一些事情

  • 内核是最新的,服务器已经重新启动。yum-y
  • 更新已运行,服务器已重新启动/usr/bin/nagios-v
  • /etc/nagios/nagios.cfg通过飞行前检查
  • 如果不重新编译,就无法禁用嵌入式perl,这是一个巨大的麻烦

    --SIGSEGV(分段错误)@0(0)--

    这意味着某些代码取消了对空指针的引用

    在GDB下运行
    /usr/bin/nagios
    ,并使用
    where
    命令找出是哪个代码执行了此操作