我有一个在Solaris 8上运行的应用程序(SunOS 5.8 Generic_108528-27 sun4u sparc SUNW,Sun-Fire-880),它运行良好好几天,直到最近它崩溃了。有一个看门狗模块在崩溃时重新启动了应用程序。然而,它一次又一次地运行和崩溃。在检查了核心转储之后,我发现它在系统函数调用上崩溃了,例如poll,write和send。我检查了传递给函数的变量的内容,看起来很好。我不知道如何解决这个问题。任何人都可以帮助提供一些指导进展?提前谢谢。
下面显示了一个关于民意调查的核心转储示例:
bash $ gdb applx applx.core
GDB是免费软件,欢迎您分发它的副本
在一定条件下;键入“显示复制”以查看条件
GDB绝对没有保修;输入“show warranty”了解详情
GDB 4.16(sparc-sun-solaris2.5),版权所有1996 Free Software Foundation,Inc ...
警告:exec文件比核心文件新
核心是由'applx -h'生成的。
程序以信号11,分段故障终止
从/usr/lib/libsocket.so.1...done读取符号
从/usr/lib/libnsl.so.1...done中读取符号
从/usr/lib/libgen.so.1...done中读取符号
从/usr/lib/libc.so.1...done中读取符号
从/usr/lib/libdl.so.1...done中读取符号
从/usr/lib/libmp.so.2...done读取符号
从/usr/platform/SUNW,Sun-Fire-880/lib/libc_psr.so.1...done读取符号。
_libc_poll()中的#0 0xff219ec4
(gdb)bt
_libc_poll()中的#0 0xff219ec4
_select()中#1 0xff1cccac
#2 0x1cf08在loop()/home/ian123/applx/src/task.c:1450中
在state_start(local = 0)中的#3 0x1e0d4 /home/ian123/applx/src/state.c:1047
#4 0x1a0f4 in main(argc = 537600,argv = 0x83400)
在/home/ian123/applx/src/main.c:578
(gdb)up
_select()中#1 0xff1cccac
(gdb)up
#2 0x1cf08在loop()/home/ian123/applx/src/task.c:1450中
1450 r = select(maxfd,rfdsp,wfdsp,efdsp,tvp);
(gdb)p maxfd
$ 1 = 23
(gdb)p rfdsp
$ 2 =(fd_set *)0xb8020
(gdb)p wfdsp
$ 3 =(fd_set *)0x0
(gdb)p efdsp
$ 4 =(fd_set *)0x0
(gdb)p tvp
$ 5 =(struct timeval *)0xb81a0
(gdb)p * rfdsp
$ 6 = {fds_bits = {7610424,0}}
(gdb)p * tvp
$ 7 = {tv_sec = 0,tv_usec = 380002}
答案 0 :(得分:2)
当我正在调查段错误而我不知道它在哪里发生时,我使用以下gdb命令:
x/1i <program_counter>
(替换&lt;程序计数器&gt;用于你的架构...(鼓滚)...程序计数器,例如:$ xip on x86。我猜它是$ pc或类似的SPARC)。
显示错误指令。从那里我检查包含内存地址的寄存器。
答案 1 :(得分:0)
如果GDB会向您显示发生分段错误的源代码,那么可以快速了解问题。