【问题标题】:How to programmatically identify the thread ID printed in GDB如何以编程方式识别 GDB 中打印的线程 ID
【发布时间】:2015-06-27 08:18:25
【问题描述】:

我正在尝试调试一个用 c++ 编写的应用程序,该应用程序是为运行 linux 的基于 ARM 的处理器编译的。

当应用程序间歇性崩溃时,它会在某个线程处停止,我假设该线程是错误所在(分段错误)。

我的问题是,我无法识别此线程是什么。我看到 GDB 运行时在 eclipse 中打印了以下内容。

蓝色下划线的数字是什么?有没有办法让我以编程方式访问它们,以便我知道在哪里查看代码?

【问题讨论】:

  • 为什么不给你的线程命名?
  • @SelçukCihan 这也会显示在 GDB 中吗?
  • Gdb 可以显示线程名称,更多信息请查看link
  • 非常感谢......这对我有用。

标签: c++ linux eclipse gdb armv7


【解决方案1】:

除了@Heshan Perera的回答。

您还可以在程序中访问较大的线程 ID

UNIX:

#include <sys/syscall.h>
syscall(SYS_gettid);

WINDOWS:(未测试)

#include <windows.h>
GetCurrentThreadId();

【讨论】:

    【解决方案2】:

    根据@Selcuk Cihan 在上面的评论中发布的this link,方括号中的第一个数字是GDB 本身分配的整数标识符,另一个是分配给线程的SysTag。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Linux/gcc,一个更好的解决方案是使用 pthread_setname_np 为线程提供一个描述性名称。然后 gdb 将在遇到断点时使用此名称,依此类推。请注意,这是对 pthreads 的 GNU 扩展。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        相关资源
        最近更新 更多