2010-07-13 8 views
1

외부 공유 라이브러리에 의존하는 프로그램이 있지만 라이브러리 내부의 함수가 실행 된 후에 중단 점을 사용할 수 없게됩니다.함수 호출 후 GDB 중단 점이 혼동됩니까?

이 기능을 실행하기 전까지는 정상적으로 작동하고 중단 될 수 있지만 이후에는 절대로 종료되지 않습니다. 프로그램을 실행하기 위해 두번 째 시도 할 때 메인에서 중단되지 않습니다. start을 사용하십시오. 이전에이 함수를 사용하지 않았기 때문에 인라인 함수 문제는 아닙니다.이 특정 함수를 주석 처리하면 모든 것이 다시 작동하기 시작합니다.

누구도 이전에 이런 일이 발생 했습니까? 내가 무엇을 할 수 있을지? GCC 3.2.3

편집과 GDB 7.1을 사용

: 사용자의 몇 가지 힌트 후 나는 프로세스가 라이브러리 호출 내에서 분기되는 것을 알아 냈다. 나는 그것이 무엇을하고 있는지 (그리고 나는 정말로 상관하지 않는다) 확신하지 못한다. 어떻게 든 보상 할 수 있을까요? 나는 아이로서 포크 모드를 실험 해왔다.하지만 일단 포크가되면 어떻게 될지 혼란스럽고 실행을 계속하거나 사용하는 방법을 알아낼 수 없다.

편집 : 추가 조사. 가장 가까운 내가 말할 수있는, gdb는 어딘가에 모든 심볼 정보를 잃고있다. 두 번째 실행 후 모든 심볼은 @plt 주소로 해석되며 처음 실행시 확인한 실제 주소로 해석되지 않습니다. 어떻게 든 프로세스의 두 번째 로딩은 처음으로 얻은 정보를 모두 잃어 버리고 다시로드하는 것을 거부합니다. 난 너무 혼란 스러워요!!

편집 : 그래서 나는 popen 호출의 vfork에이 문제를 추적했습니다. gdb가 popen과 잘 작동하지 않는 것 같습니다. 내가 popen'd vforked 과정에서 분리하자마자, 나는 나의 상징을 모두 잃는다. 나는 이것에 대해서도 온라인으로 몇 가지 보고서를 읽었습니다. 희망이 있습니까?

+0

공유 라이브러리가 새로운 프로세스를 생성합니까? – Borealid

+0

아마도 라이브러리 호출 somwhow가 호출 응용 프로그램을 종료하게 될까요? – bits

+0

gcc 3.2.3은 꽤 오래 되었습니까? 플랫폼은 무엇입니까? 리눅스? –

답변

1

vfork(2)exec(2)이 조합되어 있습니다. gdb 매뉴얼 (debugging forks)에서 인용 : exec 호출이 완료 될 때까지 어떤 시스템

, 자식 프로세스가 vfork에 의해 양산되고, 당신은 자녀 또는 부모를 디버깅 할 수 없습니다.
...
기본적으로 exec 호출이 실행 된 후 gdb는 이전 실행 가능 이미지의 기호를 삭제합니다. follow-exec-mode 명령을 사용하여이 동작을 변경할 수 있습니다.


parentfollow-fork-mode 설정을 유지하고 samefollow-exec-mode을 설정합니다.

또는 설치가 다중 프로세스 디버깅을 지원하는 경우 (gdb 버전이 7.1이므로) info inferiors을 사용하여 원래 프로세스를 찾고 inferior <num>으로 전환 해보십시오.

+0

시간 내 주셔서 대단히 감사합니다. 내 gdb 구성을 확인하고 follow-fork-mode 및 follow-exec-mode는 이미 기본 설정대로 설정되어 있습니다. /. 자식을 따르도록 config를 전환하면 fork 또는 exec 또는 무언가 이후에 중단되지만, 부모 (디버그 하위에 ) 디버깅으로 다시 전환하려고하면 실행 컨텍스트가 없습니다. 그것은 심지어 그것이 달리고 있다고 생각하지 않는다! – jdizzle

+0

"일부 시스템에서 gdb는 fork 또는 vfork 기능을 사용하여 추가 프로세스를 만드는 디버깅 프로그램을 지원합니다. 현재이 기능이있는 유일한 플랫폼은 HP-UX (11.x 이상) 및 gnu/Linux (커널 버전 2.5.60 이상). " 저는 gdb 7.1을 사용하고 있지만 2.4 커널 버전은 :/아마도 그게 내 문제를 일으키고 있을까요? – jdizzle

+0

그래서 나는 popen 호출의 vfork에이 문제를 추적했다. gdb가 popen과 잘 작동하지 않는 것 같습니다. 내가 popen'd vforked 과정에서 분리하자마자, 나는 나의 상징을 모두 잃는다. – jdizzle

관련 문제