2014-04-04 6 views
0

오후, 절대적으로. main.c로 컴파일 된 'test'응용 프로그램이 있습니다. 동적 인 liabrary 'libtest.so'는 '-g'와 함께 test.cpp에 의해 컴파일됩니다. main.c에서 'libtest.so'를 'dlopen'과 함께 호출합니다. 그리고 이제 test.cpp에 중단 점을 설정하려고합니다. 그러나 gdb는 결코 충돌하지 않습니다. 나는 다음과 같이 수행gdb dlopen에 의해 열린 동적 라이브러리에서 중단 점을 설정하는 방법

GDB ./test -d/홈/LCL/테스트

휴식 Test.cpp에 : 35

실행

는 아무도 나에게 줄 수 몇 가지 팁, 감사합니다!

+0

답장을 보내 주셔서 감사합니다. -d는 gdb를 검색 할 디렉토리를 가리 킵니다. dir 명령처럼. –

+0

나는 그것을 시도했다. 행 번호 35는 함수 이름입니다. 'gcc -c main.c -o test -ltest -L./'을 사용하여 test.c를 컴파일하면 breakpoint를 설정할 수 있지만 dlopen으로 열면 실패합니다 ... –

+0

예,하지만 이제는 저녁밥을 먹어야합니다. 나는 나중에 코드를 첨부 할 것이다. 감사합니다 Mantosh Kumar –

답변

2

먼저 dlopen이 실제로 성공했는지 확인해야합니다 (그렇지 않은 것 같습니다).

은 이렇게하려면 다음
  • dlopenmain.c에 중단 점을 설정합니다. 핸들을 돌려
  • 확인은 그 시점에서하지 NULL

이다, GDB는 libtest.so에 대한 기호를로드해야하고, libtest.soinfo shared GDB 출력에 표시해야한다.

모든 것이 좋으면 info break은 활성 주소를 test.cpp:35에 표시해야합니다. 그 중단 점이 결코 부딪치지 않으면, 실제로는 그 코드 행을 실제로 사용하지 않을 가능성이 있습니다.