gdb에서 디버깅중인 프로그램으로 SIGINT 시그널을 보내고 싶습?

puaxx의 이미지

프로그램을 실행시킨후에 ctrl+C를 누르면 종료와 동시에 무엇인가를 출력하도록 하고 있습니다.근데...출력도중에 세그멘트 에러가 나네요...

어디서 나는지 알아보려고 gdb돌리고 ctrl+C를 누르니 세그멘트 에러는 안나네요...아마도 시그널을 보내는 방법이 따로 있는듯 한데..

gdb에서 r 로 실행시킨후에 SIGINT시그널을 보내고 싶습니다..어떻게 할수 있을까요?

서지훈의 이미지

외부에서 시그널을 주기 위해선...
실행중인 프로그램의 pid를 확인 하시고...
kill 명령을 사용하시면 됩니다.

근데... Ctrl+C를 이용 하셔도 될텐데...
이 시그널을 처리하는 부분의 포인터 부분을 다시 유심히 보세요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

cinsk의 이미지

정확히 원하는 순간에 signal을 주기 위해서는 gdb 명령 signal을 씁니다.

(gdb) signal SIGINT

또는

(gdb) signal 2

참고로 gdb는 내부에 signal handling table을 유지하고 있어서, 종류에 따라서 디버깅하고 있는 프로그램에 전달할지/아닐지, 출력할지/안할지를 결정합니다. 따라서 kill(1)로 signal을 전달하면, 이 내부 table에 따라 그 영향이 결정되고, gdb 내무 명령 signal을 쓰면, 이 table을 거치지 않습니다.

cinsk의 이미지

참고로 자세한 것은 다음 info page에...

$ info gdb alter signal
$ info gdb stop signal
puaxx의 이미지

감사합니다..신스크님.