2016-09-14 5 views
0

여기에서 여러 번 논의한 문제가 있습니다. 응용 프로그램이 쉘에서 직접 시작될 때 실행되고 같은 쉘의 디버거 안에서 시작할 때 실행되지 않습니다. GDB 내에서 실행하면 "공유 객체를 열 수 없습니다"오류가 발생합니다.GDB에서 공유 객체를 열 수 없습니다.

나는 모든 게시물을 읽고했던 한 모든 제안 :

  1. I 설치 LD_LIBRARY_PATH 수동으로 검증이 내 응용 프로그램 실행과에 GDB 내부 오류
  2. I 설치 solib-search-pathsolib-absolute-prefix없이 ldd -r 패스 LD_LIBRARY_PATH 및 '/'와 각각 같은 값입니다. 모든 경로는 절대
  3. 내가 GDB가 필요한 공유 라이브러리를 찾는 위치를 확인할 수 strace와 GDB를 실행하고 LD_LIBRARY_PATH/solib 검색 경로에서 디렉토리의 목록을 무시 것을 발견
  4. 내가 할 수있는 일

?

그것은 RHEL 7

+0

실행중인 프로세스에 연결을 시도 했습니까? gdb는이 경우에/proc 정보를 사용합니다 –

답변

1

와 GDB 7.11.1있어 그 문제를

당신이 할 경우, 당신은 당신의 문제가 실제로 무엇을 설명하는 매우 빈약 한 일을 한 적이 있습니다.

나는 GDB가 필요한 공유 라이브러리를 찾는 위치를 확인할 수 strace를 함께 GDB를 실행하고 디렉토리의 목록을 무시 것을 발견

GDB 는 않는 공유 라이브러리를하지 모양이 때까지 일부 공유 라이브러리가 프로세스에 추가되었음을 런타임 로더에 의해 통지됩니다.

실행중인 하위 라이브러리에 연결하지 않았다면 GDB는 라이브러리를 찾지 않을 것이고 완전히 잘못된 결론에 도달했을 것입니다.

P. GDB 모든에 있지 사용 LD_LIBRARY_PATH수행하고 solib-search-path 또는 solib-absolute-prefix 중 하나를 설정하면 일반적으로이 필요하지 중 하나 (원격 디버깅을 수행하거나 다른 컴퓨터에서 온 core을 분석하고하지 않는 한) 입니다.

업데이트 :

쉘에서 직접 시작하고 난했습니다 사례 99.9 %에서 디버거

이내에 시작하려고하면 실행되지 않는 응용 프로그램이 실행을 이는 ~/.bashrc 또는 일부 이 재설정되어LD_LIBRARY_PATH이 부적절하게 재설정되기 때문입니다. GDB는 응용 프로그램을 실행할 쉘을 시작하고 (비대화 형) 쉘이 환경을 재설정하면 응용 프로그램이 GDB 내부와 외부에서 다르게 동작 할 수 있습니다.

~/.bashrc (또는 쉘 시작 파일이 쉘에 적합한 지 여부)을 비 대화식으로 실행할 때 아무 것도하지 않는 것이 올바른 해결책입니다.

+0

편집 된 질문을 참조하십시오 – GMichael

+0

@GMichael 답변을 업데이트했습니다. –

+0

대단히 감사합니다! 이것이 문제였습니다. – GMichael

관련 문제