gpt4 book ai didi

linux - 多线程应用程序的核心转储仅显示一个线程

转载 作者:IT王子 更新时间:2023-10-29 00:55:55 24 4
gpt4 key购买 nike

我有一个用 C++ 编写的测试应用程序,它在 main() 中启动多个线程,然后永远在 main() 中休眠。

其中一个线程正在执行导致段错误的操作并生成核心转储(之前设置了 ulimit -c unlimited)。

我正在用 gdb 打开核心,然后用 thread apply all btinfo threads 查看我只有一个线程(已启动在 main() 中),这是不可能的,因为至少 main() 线程也应该运行。

问题是其余的线程怎么可能丢失,是什么原因造成的?

这个孤独线程的回溯看起来还不错,里面没有奇怪的东西。

操作系统是Red Hat Enterprise 5.3,gdb-6.8。

最佳答案

您只看到一个线程的原因是 GDB 无法“自行”区分线程,它依赖于外部库 libthread_db , 由线程库提供。

必须在调试 session 开始时启用此库,以便监视线程事件(出生、死亡等)并在运行时将所有与线程相关的信息传达给 GDB。

你应该能够阅读

[Thread debugging using libthread_db enabled]

当您尝试调试使用-lpthread 编译的任何 文件时,但是当您调试一个GDB 时甚至不尝试启用libthread_db核心转储。

关于linux - 多线程应用程序的核心转储仅显示一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com