2
gdb에서 특정 스레드를 죽이려고합니다. 이것은 gdb에 프로그램을 연결하는 방법입니다. GDB에서 특정 스레드 죽이기
(gdb) r ./bin/myProg arg1 arg2
나는이 나는대로
raise
의 서명을 가정 여기
(gdb)t 3
[Switching to thread 3 (Thread 0x7ffff61fe700 (LWP 28549))]#0 foo() at ./src/myProg.c:288
(gdb)call raise(3,0)
(스레드 3 말) 스레드를 죽이려고하는 방법이다
(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
하여 현재 실행 스레드를 얻을 raise(threadId as displayed in the gdb, signo as 0)
하지만 스레드가 죽지는 않습니다. 다른 signo
을 사용해야합니까, 아니면 스레드 ID가 잘못 되었습니까?
참고 : 내가 SO에 this 질문을 읽을 수는 있지만 그것이 나에게 멀티 스레드 애플리케이션에서 처리
3은 유효한 스레드 ID가 아닙니다 (아마도 28548을 지정해야 할 것입니다). 0은 유효한 신호 ID가 아닙니다 (멀티 스레드 프로그램에서는 신호가 엉망입니다). 문제의 스레드로 전환하고'pthread_exit()'를 호출하면 어떨까요? – oakad