具有共享库符号的GDB Backtrace

时间:2017-04-27 10:39:45

标签: c gdb net-snmp

我正在使用net-snmp库调试应用程序崩溃。回溯如下:

#0  0x001a1c7e in _snmp_parse (sessp=0x0, session=<value optimized out>, pdu=0xb6183858, data=0xa3401248 "\301", length=12097984) at snmp_api.c:4408
#1  0x001a20bb in snmp_resend_request (slp=0x0, rp=0xb6184818, incr_retries=1) at snmp_api.c:6383
#2  0x00b89944 in send_trap_to_sess (sess=0xb6122848, template_pdu=0xa3401440) at agent_trap.c:945
#3  0x00b8ab46 in netsnmp_send_traps (trap=-1, specific=-1, enterprise=0xbbd080, enterprise_length=10, vars=0xa5400468, context=0x0, flags=0)
    at agent_trap.c:839
#4  0x00b8b0fa in send_enterprise_trap_vars (trap=-1, specific=-1, enterprise=0xbbd080, enterprise_length=10, vars=0xa5400468) at agent_trap.c:863
#5  0x00b8b153 in send_trap_vars (trap=-1, specific=-1, vars=0xa5400468) at agent_trap.c:975
#6  0x00b8b1fe in send_v2trap (vars=0xa5400468) at agent_trap.c:1049
#7  0x00288382 in applicationBaseClass::sendTraps (temp=0x161d3018) at appBaseClass.cpp:750
#8  0x00288311 in applicationBaseClass::sendTrapsByTimer (temp=0x161d3018) at appBaseClass.cpp:736
#9  0x00ac05f3 in check_timers () at exec_timer.c:383

我安装了net-snmp-debuginfo来获取源文件。细节:

net-snmp-libs-5.5-57.el6_8.1.i686
net-snmp-utils-5.5-57.el6_8.1.i686
net-snmp-debuginfo-5.5-57.el6_8.1.i686
net-snmp-5.5-57.el6_8.1.i686

我们可以看到源文件对应于安装的net-snmp版本 - 5.5-57

现在我的应用程序正在链接到net-snmp:

 [root@stg blr]# lsof -p 4043 | grep snmp
serv_trans  4043 root  mem    REG        8,2  1760620     4031 /usr/lib/libnetsnmpmibs.so.20.0.0
serv_trans  4043 root  mem    REG        8,2   701880     4978 /usr/lib/libnetsnmp.so.20.0.0
serv_trans  4043 root  mem    REG        8,2   313568     3982 /usr/lib/libnetsnmpagent.so.20.0.0
serv_trans  4043 root  mem    REG        8,2   157008     4017 /usr/lib/libnetsnmphelpers.so.20.0.0

因此,应用程序正确地链接到版本5.5-57的net-snmp库

现在,回溯。堆栈似乎不正确。它没有显示确切的呼叫顺序。例如,在第2帧中,gdb显示的行号-6383-实际上是一个声明语句。

#1  0x001a20bb in snmp_resend_request (slp=0x0, rp=0xb6184818, incr_retries=1) at snmp_api.c:6383
6383        u_char         *pktbuf = NULL, *packet = NULL;

我可能错过了什么?我似乎有正确的gdb源文件。为什么gdb的堆栈跟踪没有指向事件的确切顺序?

0 个答案:

没有答案