现在的位置: 首页 > 综合 > 正文

GDB调试net-snmp的snmpd

2013年12月02日 ⁄ 综合 ⁄ 共 2273字 ⁄ 字号 评论关闭
GDB调试net-snmp的snmpd
我顶
字号:

GDB调试net-snmp的snmpd

1、打开configure,发现CFLAG中都带有-g选项,默认都产生了调试信息。-O2选项可能对产生影响,我们去掉所有CFLAG中的-O2选项。
./configure
查看Makefile,CFLAGS中有-g选项,而且没有-O2选项。

CFLAGS = -g -Dlinux -I/usr/include/rpm

2、设置断点

我们在snmp_agent.c中设置一个断点,可以用下面的方式:
(gdb) b   源文件名:行号
在设置断点的报错:
(gdb) b snmp_agent.c:123
No source file named snmp_agent.c.

查看agent/Makfile,发现net-snmp生成了多个共享库文件(.so文件)。snmpd调用了其中的多个.so文件,而共享库只有当程序运行才开始加载的。
于是可以这么做:

gdb snmpd
(gdb)break main
(gdb)run -f -Lo

然后再设置断点就可以了。

(gdb) b snmp_agent.c:123
Breakpoint 2 at 0xc0ed14: file snmp_agent.c, line 123.

run的时候我们加上了-f和-Lo两个参数,-f表示不fork子进程,即不后台执行,这样我们才能用GDB调试。-Lo表示把Log输出到标准输出上。

我们可以在执行run前后看用info shared看一下加载的共享库。
在run之前:
(gdb) info shared
No shared libraries loaded at this time.
在run之后:
(gdb) info shared
From        To          Syms Read   Shared Object Library
0x009eb4f0  0x00a73784  Yes         /usr/local/lib/libnetsnmpmibs.so.10
0x00ee2c58  0x00f06368  Yes         /usr/local/lib/libnetsnmpagent.so.10
0x00c435d8  0x00c54b14  Yes         /usr/local/lib/libnetsnmphelpers.so.10
0x00f1f8f4  0x00f78230  Yes         /usr/local/lib/libnetsnmp.so.10
0x00b70870  0x00baac20  Yes         /usr/lib/librpm-4.3.so
0x0027eb40  0x003377ac  Yes         /usr/lib/librpmdb-4.3.so
0x00392a98  0x0039ea40  Yes         /usr/local/lib/libelf.so.1
0x001700e0  0x00178514  Yes         /lib/libselinux.so.1
0x00b18ba0  0x00b55954  Yes         /usr/lib/librpmio-4.3.so
0x00bd578c  0x00c0b598  Yes         /usr/local/lib/libbeecrypt.so.6
0x00ad4bb0  0x00ad58c4  Yes         /lib/libdl.so.2
0x00c180d0  0x00c1d66c  Yes         /lib/tls/librt.so.1
0x00ade2d0  0x00ae67e8  Yes         /lib/tls/libpthread.so.0
0x002500c0  0x0025dddc  Yes         /usr/lib/libbz2.so.1
0x00da6310  0x00daadfc  Yes         /usr/lib/libpopt.so.0
0x001125b0  0x0011babc  Yes         /usr/lib/libz.so.1
0x003cbbb0  0x0045dd2c  Yes         /lib/libcrypto.so.4
0x00124300  0x0013d5a4  Yes         /lib/tls/libm.so.6
0x0049ebc0  0x005911a0  Yes         /lib/tls/libc.so.6
0x00d15c30  0x00d7e188  Yes         /usr/lib/libstdc++.so.6
0x00c2d7e8  0x00c3412c  Yes         /lib/libgcc_s.so.1
0x009677a0  0x00979a7f  Yes         /lib/ld-linux.so.2
0x00148cd0  0x00156374  Yes         /usr/lib/libgssapi_krb5.so.2
0x0018b860  0x001d9f04  Yes         /usr/lib/libkrb5.so.3
0x00deb8ec  0x00debfcc  Yes         /lib/libcom_err.so.2
0x001e4260  0x001f8fb8  Yes         /usr/lib/libk5crypto.so.3
0x00cc53f0  0x00cd0ecc  Yes         /lib/libresolv.so.2

【上篇】
【下篇】

抱歉!评论已关闭.