Debugging 如何在Net SNMP agentX子代理中找到segfault的崩溃站点

Debugging 如何在Net SNMP agentX子代理中找到segfault的崩溃站点,debugging,segmentation-fault,snmp,Debugging,Segmentation Fault,Snmp,我试图理解Centos 64位上agentX中的随机segfault。所谓随机,我的意思是,子代理除了检查是否有什么事情要做之外,所做的很少——它所属的服务器处于空闲状态,并且已经运行了一段时间。我有一个堆栈跟踪显示崩溃发生在agentx_open_会话+0x120。所使用的Net SNMP版本是通过yum获得的,因此没有调试符号,但我知道它是5.5.41.el6_3.1.x86_64。我想知道在哪里可以找到此版本的调试符号,以及如何使用它们在Net SNMP代码中定位崩溃站点。我没有核心文件-

我试图理解Centos 64位上agentX中的随机segfault。所谓随机,我的意思是,子代理除了检查是否有什么事情要做之外,所做的很少——它所属的服务器处于空闲状态,并且已经运行了一段时间。我有一个堆栈跟踪显示崩溃发生在agentx_open_会话+0x120。所使用的Net SNMP版本是通过yum获得的,因此没有调试符号,但我知道它是5.5.41.el6_3.1.x86_64。我想知道在哪里可以找到此版本的调试符号,以及如何使用它们在Net SNMP代码中定位崩溃站点。我没有核心文件-只有堆栈跟踪。

您需要为此启用CentOS Debuginfo存储库

或者,首选方式是通过在
/etc/yum.repos.d/CentOS Debuginfo.repo
中设置
enabled=1来启用repo

之后,您可以运行一个简单的
yum安装net-snmp-debuginfo

然后,要生成核心文件,需要为运行net smnpd的用户启用核心文件。不幸的是,对于CentOS来说,这是用户
root
。因此,要仅为本次会话启用核心文件,最好将
ulimit-c unlimited
添加到netsnmpd的启动文件
/etc/init.d/snmpd
仅用于测试。你真的需要以后再删除它

或者,可能更好的方法是关闭netsnmpd,启动一个根shell,运行
ulimit
,然后手动启动snmpd。如果您能够可靠地再现问题,此方法将省去清理过程

不幸的是,我不知道它将在哪里倾倒核心,但我相信你会找到它