如何使用gdb确定核心文件中pthread_raise(sig=6)的原因

问题描述 投票:0回答:1

我的应用程序有时会崩溃,但我找不到原因。我的应用程序是多线程(QThread)并使用多个QUdpSockets。我认为这是由于同时访问套接字而发生的,但我不知道何时何地。

核心文件中有bt的结果:

#0 0x414596e1 in ?? ()
#1 0x412d731b in pthread_kill (thread=1649, signo=6) at signals.c:69
#2 0x412d76a0 in __pthread_raise (sig=6) at signals.c:200
#3 0x41459395 in ?? ()
#4 0x00000006 in ?? ()
#5 0x41546ff4 in ?? ()
#6 0xbd5fd8bc in ?? ()
#7 0x4145a87d in ?? ()
#8 0x00000006 in ?? ()
#9 0x00000020 in ?? ()
#10 0x00000000 in ?? ()
  1. sig=6 是什么以及何时发出?
  2. 如何确定此行为的原因?
  3. 我如何知道缺少哪些 -dev 库(???堆栈的位置)?
gdb pthreads qthread raise core-file
1个回答
0
投票

Linux 上的信号 6 是

SIGABRT
- 事实上,它是通过
pthread_raise()
引发的,这似乎表明应用程序已直接调用
abort()
或失败的
assert()

回溯的缺失部分很可能位于 QT 库中,因此请尝试为所有这些安装调试符号。

© www.soinside.com 2019 - 2024. All rights reserved.