代码之家  ›  专栏  ›  技术社区  ›  Dmitry Yudakov

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

  •  6
  • Dmitry Yudakov  · 技术社区  · 15 年前

    main() 然后睡在床上 主()

    我要用 gdb 然后看看 thread apply all bt info threads 我只有一条线索 ),这是不可能的,因为至少 主() 线程也应该在运行。

    这根孤独的线的回溯看起来没问题,里面没有什么奇怪的东西。

    5 回复  |  直到 15 年前
        1
  •  3
  •   Kevin    15 年前

    您之所以只看到一个线程,是因为GDB无法“单独”区分线程,它依赖于外部库 libthread_db ,由线程库提供。

    你应该能够阅读

    [Thread debugging using libthread_db enabled]
    

    当您尝试调试时 任何 -lpthread ,但GDB甚至不尝试启用 libthread_db 调试核心转储时。

        2
  •  1
  •   Dmitry Yudakov    15 年前

    kernel-2.6.18-164.el5

    http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html-single/5.4_Technical_Notes/index.html

    1.110.1条。RHSA-2009:1193:32位系统上的重要安全和错误修复更新,一些多线程应用程序的核心转储不包括所有线程信息。(BZ#505322)

    https://bugzilla.redhat.com/show_bug.cgi?id=505322

        3
  •  0
  •   Simone    15 年前

    你真的确定这是不可能的吗?这个问题可能与主线程退出而不等待其他线程的事实有关。

        4
  •  0
  •   ks1322    15 年前

    尝试在Valgrind下运行应用程序。Maby这将有助于找出坠机的原因。

        5
  •  0
  •   rib    15 年前

    如果你没有SIGEGV的sighandler和alt stack,这是一个特殊的情况,就使用strace。

    strace -f myprogram

    (曼斯特拉斯)

    (我们需要-f标志,因为线程在Linux中总是全局作用域。e、 g.~在同一内存中运行的进程)

    我强调了有趣的部分。。。

    克隆(

    附28757流程

    [pid 28756]rt U sigprocmask(SIG U块,[CHLD],

    [pid 28757]设置鲁棒性列表(0x7fc1fc31a9f0,0x18

    [pid 28756]<。。。rt_sigprocmask恢复>[],8)=0

    [pid 28757]<。。。继续设置健壮列表(0)

    [pid 28757]马德维塞(0x7fc1fb91a000、10465280、马德维

    [pid 28756]rt_sigprocmask(SIG_SETMASK,[],

    [pid 28756]<。。。rt_sigprocmask恢复>空,8)=0

    〔PID 28757〕出口(0)=?

    流程28757分离

    纳米间距({1,0},0x7fffce29c4b0)=0

    tgkill(2875628756,SIGABRT)=0 ---sigabt(中止)@0(0)---

    中止(核心转储)

    如果你确实在退出(崩溃)有实时线程,我会创建一个BugZILA条目(第一次搜索BugZILA OFC)。

    推荐文章