2012-08-14 2 views
2

공유 객체 라이브러리를 동적으로로드하는 실행 파일이 있습니다. foo.so를 예로 들어 보겠습니다. 나는 foo.so를 만들지 않으며 그것은 내 코드에서 사용할 라이브러리로 내게 주어진다. foo.cpp는 foo.so를 제공하도록 컴파일합니다. foo.cpp에 액세스 할 수 없지만 foo.so가 있습니다. 내 실행 파일이이 공유 라이브러리 foo.so (즉, foo.cpp 내의 함수가 호출 될 때) 내에서 함수를 호출 할 때 중단 점을 설정하려고합니다. gdb에서 그렇게 할 수 있습니까? 시도했습니다.공유 객체 파일 내에 gdb 브레이크 포인트 설정

gdb funcname 

그러나 작동하지 않는 것 같습니다. 그 시점에서 gdb를 깨뜨리는 방법은 무엇입니까?

+0

사용중인 운영 체제 및 gdb의 버전에 대해 좀 더 자세히 설명해 주시겠습니까? – razeh

+0

CentOS 5.5와 gdb 7.2를 사용하고 있습니다. –

+0

@DeeptiJain 공유 객체 라이브러리가 적절한 디버그 플래그로 컴파일 되었습니까? –

답변

3

gdb에서 그렇게 할 수 있습니까?

예.

나는 작동하지 않을 것입니다

gdb funcname을 시도했습니다. gdb exename을 실행 한 다음 (gdb) 프롬프트에서 break funcname을 실행해야합니다. 그 시점에서

, GDB는 것 (아직 동적으로 foo.so로드 있지 않기 때문에) funcname 아직 존재하지 않음을 알려줍니다, 그리고 당신은 연기 중단 점을 만들 것인지 질문합니다. yes으로 대답해야하며, GDB는 새로운 공유 라이브러리가로드 될 때마다이 중단 점 설정을 다시 시도합니다. 결국 이것은 성공할 것이고, 중단 점을 (자동으로 그리고 자동으로) 설정해야하고, 나중에 funcname을 호출하면 그 중단 점이 실행되고 GDB가 멈출 것이다 (정확히 원하는대로).

관련 문제