请教qnx重启问题

我们的产品采用6.2.1版本的系统,最近发现会莫名其妙的重启,有时半个月发生,有时一个月发生,有时5、6天发生,发生在不同的机器上,而且没有周期性。前一段由于没有任何线索,也没办法上来请教。最近一次发生在今天早上,终于得到了一些信息,请各位高人指点。

首先,可以确定系统是通过shutdown调用而重启的。半个月前我在/var/log/目录下建立了一个wtmp空文件,今天早上重启后去查看,已经写入了如下信息

./cat /var/log/wtmp

Gftp385054Grootftp589854`rootttyGftp5898549G# 72188?s?Fftp1372188Hs?Frootftp1396755??üFrootttyp0 ?üFftp1396755V?üFrootttyp031?Frootttyp0

然后,在dumper的输出目录下面出现了一个.core文件,我用coreinfo查看得到如下信息

./coreinfo /home/dumps/HMI.core

/home/dumps/HMI.core:
processor=X86 num_cpus=1
cpu 1 cpu=586 name=Cyrix 586 F5M4S0 speed=300
flags=0xc000007f FPU MMU CPUID RDTSC INVLPG WP BSWAP MMX CMOV
cyc/sec=300732200 tod_adj=1190033390000000000 nsec=615981809361443 inc=999847
boot=1190033390 epoch=1970 intr=0
rate=838095345 scale=-15 load=1193
HOSTNAME=“SunyPCC500E” MACHINE=“x86pc”
pid=10137642 parent=10129440 child=0 pgrp=16394 sid=1
flags=0x002200 umask=0 base_addr=0x8048000 init_stack=0x8047c5c
ruid=0 euid=0 suid=0 rgid=0 egid=0 sgid=0
ign=0000000000000000 queue=ff00000000000000 pending=0000000000000000
fds=16 threads=4 timers=5 chans=16
thread 1
ip=0xb0329f9d sp=0x8047784 stkbase=0x7fc7000 stksize=528384
state=CONDVAR flags=0 last_cpu=1 timeout=00000000
pri=10 realpri=10 policy=RR
thread 2 SIGNALLED-SIGSEGV code=1 MAPERR refaddr=400ffffc fltno=11
ip=0xb031c7f8 sp=0x7fc6c14 stkbase=0x7fa6000 stksize=135168
state=STOPPED flags=4020000 last_cpu=1 timeout=00000000
pri=10 realpri=10 policy=RR
thread 3
ip=0xb0329292 sp=0x7fa5f70 stkbase=0x7f85000 stksize=135168
state=STOPPED flags=4020000 last_cpu=1 timeout=00000000
pri=10 realpri=10 policy=RR
thread 5
ip=0xb0329292 sp=0x7f63f80 stkbase=0x7f43000 stksize=135168
state=RECEIVE flags=4020000 last_cpu=1 timeout=00000000
pri=10 realpri=10 policy=RR
blocked_chid=13

我看不太懂,也请各位帮忙看看这是什么意思。
另外我还开了slogger,但是没有记录输出。

综合以上情况,我想问两个问题:

  1. 第二个线程似乎显示发生了地址越界,那么在地址越界后我们的进程被关掉了,之后QNX系统会重启么?因为只有这个进程异常退出了,似乎和重启有着一定的联系。
  2. 软件其他部分我也查过了,在正常运行不进行操作的时候不会调用shutdown,那么又是谁调用的shutdown?前面一个进程地址越界是否会造成其他程序的异常工作?

我刚学习QNX没多久,请各位赐教,谢谢!

重启的问题可能有些蹊跷,那我想问一下以下这段的具体含义
thread 2 SIGNALLED-SIGSEGV code=1 MAPERR refaddr=400ffffc fltno=11
ip=0xb031c7f8 sp=0x7fc6c14 stkbase=0x7fa6000 stksize=135168
state=STOPPED flags=4020000 last_cpu=1 timeout=00000000
pri=10 realpri=10 policy=RR

另外我怎样才能知道这个线程究竟是我系统里面的哪个线程呢?通过线程的启动顺序可以确定么?

编译一个_g版本,
运行后, 用gdb调试, attach到已运行的进程上, 用info thread查看你的进程2是哪个进程.

或者一直运行_g版本, 直到异常产生coredump, 用gdb可以跟踪到coredump中到底死在哪句指令上, 但也不是一定灵, 如果你的地址越界行为把调用栈完全破坏了, 那这招也就不管用了.