将线程ID从top映射到gdb

发布于 2024-12-08 02:03:18 字数 333 浏览 0 评论 0原文

我正在使用 top 来查看线程明智的 cpu 使用情况,

  top -H -p `pgrep app.out`

它显示了每个线程的一些 pid,就像

4015
4016

我使用 gdb Attach 命令将 gdb 连接到应用程序一样。 现在我想切换到线程 4015,它显示在顶部 o/p 内。

我怎样才能做到这一点?

如果我触发线程 4015,它会显示没有线程。因为我需要在 gdb 中给出线程 id。

那么如何将顶级线程 id 映射到 gdb 线程 id 呢?

I am using top to see the thread wise cpu usage using

  top -H -p `pgrep app.out`

It is showing some pid for each thread like

4015
4016

I had attached gdb to the application using gdb attach command.
Now I want to switch to thread 4015 which is showing inside top o/p.

How can I do that ?

If I fire thread 4015 it is showing no thread . as I need to give thread id in gdb.

So how can I map top thread id to gdb thread id ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

血之狂魔 2024-12-15 02:03:18

您应该能够将 GDB 中显示的 LWPtop 信息相匹配:

根据我使用 Firefox 的快速测试,您可以在 top -H 中看到这一点-p

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
6492 kevin     20   0 1242m 386m  31m S  0.3  4.9   0:09.00 firefox
6470 kevin     20   0 1242m 386m  31m S  5.7  4.9   5:04.89 firefox

在 GDB 信息线程中:

 22   Thread 0x7fe3d2393700 (LWP 6492) "firefox" pthread_cond_timedwait...
...
* 1   Thread 0x7fe3dd868740 (LWP 6470) "firefox" __GI___poll ()...

编辑:仅供您参考,这里有一个全新的 gdb 命令:lwp_to_id:(

import gdb
class lwp_to_id (gdb.Command):
    def __init__(self):
        gdb.Command.__init__(self, "lwp_to_id", gdb.COMMAND_OBSCURE)

    def invoke(self, args, from_tty):
        lwp = int(args)
        for thr in gdb.selected_inferior().threads():
            if thr.ptid[1] == lwp:
                print "LWP %s maps to thread #%d" % (lwp, thr.num)
                return
        else:
            print "LWP %s doesn't match any threads in the current inferior." % lwp
lwp_to_id()

至少在 GDB 的 trunk 版本上工作,不确定官方版本!

You should be able to match the LWP displayed in GDB with the top information:

according to my quick tests with Firefox, you can see that in your top -H -p:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
6492 kevin     20   0 1242m 386m  31m S  0.3  4.9   0:09.00 firefox
6470 kevin     20   0 1242m 386m  31m S  5.7  4.9   5:04.89 firefox

and that in GDB info threads:

 22   Thread 0x7fe3d2393700 (LWP 6492) "firefox" pthread_cond_timedwait...
...
* 1   Thread 0x7fe3dd868740 (LWP 6470) "firefox" __GI___poll ()...

EDIT: just for you in exclusivity, here is a brand new commands for gdb: lwp_to_id <lwp>:

import gdb
class lwp_to_id (gdb.Command):
    def __init__(self):
        gdb.Command.__init__(self, "lwp_to_id", gdb.COMMAND_OBSCURE)

    def invoke(self, args, from_tty):
        lwp = int(args)
        for thr in gdb.selected_inferior().threads():
            if thr.ptid[1] == lwp:
                print "LWP %s maps to thread #%d" % (lwp, thr.num)
                return
        else:
            print "LWP %s doesn't match any threads in the current inferior." % lwp
lwp_to_id()

(working at least on the trunk version of GDB, not sure about the official releases !

浪漫人生路 2024-12-15 02:03:18

执行

ps xjf 

此操作将为您提供所有进程及其 pid 和父 pid 的树。

Do a

ps xjf 

This will give you a tree of all processes with their pid and parent pid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文