杀死GDB中的特定线程

时间:2014-04-23 07:13:08

标签: c multithreading debugging gdb

我想杀死gdb中的特定线程。 这是我将程序附加到gdb的方式。

(gdb) r ./bin/myProg arg1 arg2

我通过

获取当前正在运行的线程
(gdb) info threads
    3 Thread 0x7ffff61fe700 (LWP 28549)  0x000000323b6db7ad in foo () from /lib64/libc.so.6
  * 2 Thread 0x7ffff6bff700 (LWP 28548)  bar () at ./src/myProg.c:229
    1 Thread 0x7ffff7506740 (LWP 28547)  0x000000323be0822d in pthread_join () from /lib64/libpthread.so.0

这就是我试图杀死一个线程(比如线程3)

(gdb)t 3
[Switching to thread 3 (Thread 0x7ffff61fe700 (LWP 28549))]#0  foo () at ./src/myProg.c:288
(gdb)call raise(3,0)

我假设raise的签名为raise(threadId as displayed in the gdb, signo as 0)

但线程并没有被杀死。我应该使用不同的signo还是线程ID错误?

注意: 我在SO中阅读了this个问题,但这对我没有帮助

1 个答案:

答案 0 :(得分:5)

多线程应用程序中的信号处理通常很复杂。因此,更有意义的是只需切换到线程,确保它没有持有任何资源(例如锁定的互斥锁),然后只是代表它调用pthread_exit(),就像它自动退出一样。