$ gcc -g tmp.c
$ gdb -q ./a.out
(gdb) r
Starting program: /home/cinsk/src/a.out
hello
Program received signal SIGTRAP, Trace/breakpoint trap.
main () at tmp.c:10
10 printf("world\n");
(gdb) _
portable하게 만들려면, 위 방법 대신, 적절한 위치에 pause()를 삽입하고, shell에서 해당 프로세스에게 SIGUSR1 등을 날리는 방법을 고려하는 것이 좋습니다.
gdb 메세지를 확인해보니까 이런게 있네요.
Stopped due to shared library event
프로세스가 가지는 라이브러리는 libc.so.c 이것뿐인데
라이브러리에서 이벤트가 발생한다고하니 libc에서 이벤트가 발생하는 것 같은데
make의 어떤 부분이 define으로 이벤트를 발생 시키는 걸까요?
아래의 Make 메세지를 보시면 디버그에 -DVARIANT_g 가 하나 더 있고 -g 옵션이 붙은 거 뿐인거 같은데
-DVARIANT_g 가 뭐죠? 이거 때문에 이벤트가 발생할까요?
아님 이 라이브러리가 다른 libc라이브러리와 다르게 만들어 졌을까요?
그것도 아니라면 제가 모르는 라이브러리가 링크 되는 걸까요?
gdb 같은 디버거를
gdb 같은 디버거를 쓰면 되지 않나요? 디버거를 쓸 수 없는 환경인가요?
최종 목표가 gdb로
최종 목표가 gdb로 attach를 시키는 겁니다.
그런데 attach는 이미 실행 중인 프로세스에 대해서 되는 거라
attach 할려고 보면 어느 정도 실행이 되어서 어떤 부분은 그냥
지나가더라고요..
gdb로 바로 실행하면
gdb로 바로 실행하면 안되는건가요?
$ gdb ./a
=================================================
Do the python !
=================================================
=================================================
Do the python !
=================================================
x86이라면:#include
x86이라면:
GDB로 실행하면:
portable하게 만들려면, 위 방법 대신, 적절한 위치에 pause()를 삽입하고, shell에서 해당 프로세스에게 SIGUSR1 등을 날리는 방법을 고려하는 것이 좋습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
쉘에서 바로 Interrupt로 멈출 순 없나요?
소스에는 아무것도 삽입하지 않고 쉘을 통해서만 pause 시킬순 없나요?
Momentics라는 Eclipse 기반 프로그램을 사용하는데
그 프로그램에서는 Remote 타켓의 프로그램을 디버깅을 하게 되면 시작과 동시에 멈춥니다.
아무리 봐도 Attach하는 방식인데 시작과 동시에 어떻게 멈추게 하는지..
debugging library를 사용해서 시작 시점에 멈추는 걸까요?
혹시 그거 자바
혹시 그거 자바 프로그램 아닌가요?
Java 에서 지원하는 디버깅 인터페이스를 이용해서 그런게 아닐까 추측을.. ^_^.
-----------------
한글을 사랑합니다.
-----------------
한글을 사랑합니다.
eclipse는 안써봐서
eclipse는 안써봐서 모르겠지만, 질문하신 내용을 보니, gdbserver/gdb를 쓰는 것 같네요.
디버깅할 프로그램을 바로 시작하는 것이 아니라, gdbserver를 이용해서 시작하고,
gdb에서 target을 remote로 설정하는 방식이 아닐까 합니다.
자세한 것은 'info gdb remote'에 나옵니다. 이 때 COMM 파라메터로 대충 "localhost:50000" 정도를 쓰면 되겠네요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
c 라이브러리에서 이벤트를 발생하는 방법?
gdb 메세지를 확인해보니까 이런게 있네요.
Stopped due to shared library event
프로세스가 가지는 라이브러리는 libc.so.c 이것뿐인데
라이브러리에서 이벤트가 발생한다고하니 libc에서 이벤트가 발생하는 것 같은데
make의 어떤 부분이 define으로 이벤트를 발생 시키는 걸까요?
아래의 Make 메세지를 보시면 디버그에 -DVARIANT_g 가 하나 더 있고 -g 옵션이 붙은 거 뿐인거 같은데
-DVARIANT_g 가 뭐죠? 이거 때문에 이벤트가 발생할까요?
아님 이 라이브러리가 다른 libc라이브러리와 다르게 만들어 졌을까요?
그것도 아니라면 제가 모르는 라이브러리가 링크 되는 걸까요?
이게 실행 파일 make 메세지고
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -c -O -Wc,-Wall -Wc,-Wno-parentheses -DNDEBUG -I. -ID:/mydoc/Momentics/TestCallStackSize/sh/o-le -ID:/mydoc/Momentics/TestCallStackSize/sh -ID:/mydoc/Momentics/TestCallStackSize -IC:/QNX/QNX632/target/qnx6/usr/include -EL -DVARIANT_le D:/mydoc/Momentics/TestCallStackSize/TestCallStackSize.c
C:/QNX/QNX632/host/win32/x86/usr/bin/rm -f D:/mydoc/Momentics/TestCallStackSize/sh/o-le/TestCallStackSize
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -Wl,--no-keep-memory -oD:/mydoc/Momentics/TestCallStackSize/sh/o-le/TestCallStackSize TestCallStackSize.o -L. -LC:/QNX/QNX632/target/qnx6/shle/lib -LC:/QNX/QNX632/target/qnx6/shle/usr/lib -EL
이건 디버그 make 메세지입니다.
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -c -Wc,-Wall -Wc,-Wno-parentheses -I. -ID:/mydoc/Momentics/TestCallStackSize/sh/le -ID:/mydoc/Momentics/TestCallStackSize/sh/o-le-g -ID:/mydoc/Momentics/TestCallStackSize/sh -ID:/mydoc/Momentics/TestCallStackSize -IC:/QNX/QNX632/target/qnx6/usr/include -EL -g -DVARIANT_le -DVARIANT_g D:/mydoc/Momentics/TestCallStackSize/TestCallStackSize.c
C:/QNX/QNX632/host/win32/x86/usr/bin/rm -f D:/mydoc/Momentics/TestCallStackSize/sh/o-le-g/TestCallStackSize_g
C:/QNX/QNX632/host/win32/x86/usr/bin/qcc -Vgcc_ntosh -Wl,--no-keep-memory -oD:/mydoc/Momentics/TestCallStackSize/sh/o-le-g/TestCallStackSize_g TestCallStackSize.o -L. -LC:/QNX/QNX632/target/qnx6/shle/lib -LC:/QNX/QNX632/target/qnx6/shle/usr/lib -EL -g
댓글 달기