3

多くのスレッドでアプリをデバッグしているので、prctlを使用してそれらに名前を付けました。これはgdbのinfo threadsオプションでうまく機能しますが、操作でもそれが表示されれば便利ですthread * apply all。これを行うようにgdbを強制する方法はありますか?

(gdb) info threads
  Id   Target Id         Frame 
  ...
  3    Thread 0x7ffff6ffe700 (LWP 30048) "poll_uart_threa" 0x00007ffff78eb823 in select ()
    at ../sysdeps/unix/syscall-template.S:82
  2    Thread 0x7ffff77ff700 (LWP 30047) "signal hander" do_sigwait (set=<optimized out>, 
    sig=0x7ffff77feed8)
    at ../nptl/sysdeps/unix/sysv/linux/../../../../../sysdeps/unix/sysv/linux/sigwait.c:65
* 1    Thread 0x7ffff7fcc700 (LWP 30046) "simulator" __lll_lock_wait ()
    at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:132

ポインタ、PID {まあ、スレッドIDですが、LWPスレッド==プロセス、ish}、および名前

(gdb) thread apply all bt
...
Thread 3 (Thread 0x7ffff6ffe700 (LWP 30048)):
#0  0x00007ffff78eb823 in select () at ../sysdeps/unix/syscall-template.S:82
#1  0x0000000000403bb3 in poll_uart_thread (unused=0x0) at uart.c:96
#2  0x00007ffff7bc4e9a in start_thread (arg=0x7ffff6ffe700) at pthread_create.c:308
#3  0x00007ffff78f24bd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#4  0x0000000000000000 in ?? ()

Thread 2 (Thread 0x7ffff77ff700 (LWP 30047)):
<call stack>
#2  0x0000000000417a89 in sig_thread (arg=0x7fffffffbb60) at simulator.c:879
#3  0x00007ffff7bc4e9a in start_thread (arg=0x7ffff77ff700) at pthread_create.c:308
#4  0x00007ffff78f24bd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#5  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7ffff7fcc700 (LWP 30046)):
<call stack>
#9  0x00000000004182e3 in simulator (flash_file=0x7fffffffe0e4 "../programs/blink.bin")
    at simulator.c:1005
#10 0x0000000000401f14 in main (argc=3, argv=0x7fffffffdd48) at cli.c:167

コールスタックを探すことで名前を見つけることができますが、ここではPIDとポインターしかない要約行に出力されると便利です。

4

2 に答える 2

0

簡単な方法はありません。GDB にパッチを適用する必要があります。これは簡単なパッチです。ここで見つけることができます。

于 2021-08-24T11:17:24.343 に答える
-1

ここではPIDとポインタしかない要約行に出力されると便利/便利/などです。

GDBbugzillaに拡張リクエストを提出してください

Pythonが埋め込まれたGDBを使用している場合は、「スレッド適用」スクリプトを実行して必要な処理を実行できる可能性がありますが、実際にはすでに正しい処理を実行する必要があります。

于 2012-10-02T01:55:10.547 に答える