У меня есть приложение, работающее на Solaris 8 (SunOS 5.8 Generic_108528-27 sun4u sparc SUNW, Sun-Fire-880), и оно работает хорошо в течение нескольких дней, пока недавно не вышло из строя.Был модуль сторожевого таймера, который перезапускал приложение, когда оно падало.Тем не менее, он работает и разбился снова и снова.Изучив дампы ядра, я обнаружил, что он зависал при вызовах системных функций, таких как опрос, запись и отправка.Я проверил содержимое переменных, переданных в функции, и они выглядели хорошо.Я понятия не имею, как решить эту проблему.Кто-нибудь может помочь дать некоторые указания о том, где действовать?Заранее спасибо.
Ниже приведен один из примеров дампа основной памяти в опросе:
bash $ gdb applx applx.core
GDB - свободное программное обеспечение, и вы можете распространять его копии.
при определенных условиях;введите «показать копирование», чтобы увидеть условия.
На GDB нет абсолютно никаких гарантий;для подробной информации введите «показать гарантию».
GDB 4.16 (sparc-sun-solaris2.5), Copyright 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.
# 0 0xff219ec4 в _libc_poll ()
(gdb)bt
# 0 0xff219ec4 в _libc_poll ()
# 1 0xff1cccac в _select ()
# 2 0x1cf08 в цикле () в /home/ian123/applx/src/task.c:1450
#3 0x1e0d4 в state_start (local = 0) в /home/ian123/applx/src/state.c:1047
# 4 0x1a0f4 в main (argc = 537600, argv = 0x83400)
в /home/ian123/applx/src/main.c:578
(gdb) вверх
# 1 0xff1cccac в _select ()
(gdb) вверх
# 2 0x1cf08 в цикле () в /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}