2014-04-23 2 views
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 질문을 읽을 수는 있지만 그것이 나에게 멀티 스레드 애플리케이션에서 처리

+1

3은 유효한 스레드 ID가 아닙니다 (아마도 28548을 지정해야 할 것입니다). 0은 유효한 신호 ID가 아닙니다 (멀티 스레드 프로그램에서는 신호가 엉망입니다). 문제의 스레드로 전환하고'pthread_exit()'를 호출하면 어떨까요? – oakad

답변

4

신호 일반적으로 복잡 도움이되지 않았다. 따라서 스레드로 전환 한 다음 잠긴 뮤텍스와 같은 리소스가 없는지 확인한 다음 자체적으로 종료 한 것처럼 pthread_exit()을 호출하기 만하면됩니다.