어떻게 앞에 추가 디렉토리에 라이브러리 경로를 적재할 때 core 파일에서 리눅스에서는 gdb

StackOverflow https://stackoverflow.com/questions/84341

  •  01-07-2019
  •  | 
  •  

문제

나는 코어 파일이 생성되는 원격 시스템에서는 직접 액세스할 수 없습니다.또한이 지역의 사본은 라이브러리 파일을 원격에서 시스템의 실행 파일을 충돌 프로그램입니다.

고 싶 분석이 핵심에서 덤프 gdb.

예를 들어:

gdb path/to/executable path/to/corefile

내 라이브러리는 현재 디렉토리에 있습니다.

과거에는 본 디버거를 구현하이 제공하여"옵션이다"또는"-p/=.";그래서 제 질문은:

는 방법을 지정할 수 있는 라이브러리로드를 처음부터 상대적인 경로로는 나의 현재 디렉토리면 분석 corefile 에 gdb?

도움이 되었습니까?

해결책

시작 gdb 를 지정하지 않고 실행 또는 코어 파일,다음과 같은 명령을 입력하십시오:

set solib-absolute-prefix ./usr
file path/to/executable
core-file path/to/corefile

당신이 필요가 있는지 확인하는 거울이 당신의 라이브러리 경로에서 정확하게 타겟 시스템입니다.위의 의미한 디버깅을 위한 목표와 일치하지 않는 호스트하는 이유는,그것의 중요한 복제의 루트 파일 시스템을 포함하는 구조의 라이브러리입니다.

면 디버깅을 원격 서버에 동일한 건물과 리눅스/glibc 버전으로 귀하의 호스팅,당신은 할 수 있습니다 fd 제안:

set solib-search-path <path>

하려고 하는 경우 재정의 라이브러리의 일부이지만,모든 복사 할 수 있습니다 대상 라이브러리의 디렉토리 구조로 임시 배치 및 사용 solib-absolute-prefix 솔루션 설명한다.

다른 팁

나는 확실하지 않다 이것이 가능한 모든 내 gdb 그러나 나는 아무 전문가입니다.

그러나 내가에 댓글을 달 수 있습니다 Linux 동적 링커.다음과 같은 인쇄의 경로를 모두 해결하 공유 라이브러리 및 해결되지 않은 것들입니다.

ldd path/to/executable

우리는 방법을 알아야 공유 라이브러리에 연결되어 있었으로 귀하의 실행 파일을 실행합니다.이렇게 하려면 다음 명령어를 사용합니다.

readelf -d path/to/executable | grep RPATH
  • 해야의 명령을 인쇄 아무것도,동적 링커가 사용하여 기준 위치를 더한 환경변수 LD_LIBRARY_PATH 을 찾기 위해 공유 라이브러리입니다.

  • 면 명령 출력 라인,동적 링커를 무시 LD_LIBRARY_PATH 사용 하드 코딩된 rpaths 대신 합니다.

    는 경우 나열 rpaths 은 절대자,유일한 솔루션을 내가 알고있는 사본(또는 심볼릭 링크)라이브러리에 나열된 위치.

    는 경우 나열 rpaths 은 상대적이,그들이 포함됩$원래는 대체될 것입니다에서 실행 시간의 경로를 실행 파일을 실행합니다.이동 중 하나는 실행 파일이나 라이브러리를 일치합니다.

추가 정보를 위해,당신은 시작할 수 있다:

man ld.so

이 발췌에 developer.apple.com

set solib-search-path path

이 변수를 설정한 경우에는,경로입니다 콜론으로 구분한 목록의 디렉토리 검색에 대한 공유 라이브러리입니다. solib-search-path' is used after solib-absolute-접두사'실패를 를 찾거나 라이브러리 경로를 라이브러리 대신 상대 절대적이다.을 사용하려는 경우 solib-search-path' instead of solib-absolute-접두사',야 set`solib-absolute-접두사'a 존재 디렉터리를 방지하 GDB 에서 발견에서 당신의 호스트의 라이브러리입니다.

편집:

나는 생각하지 않을 사용하여 위의 설정을 추가합 디렉토리를 추가했지만,그것은 보인다 추가하는,그래서 파일을 찾을 수 없에서 현재 시스템이 선택한 길을 내가 추가됩니다.나는 설정 solib-absolute-접두사가 가짜이며 추가하는 디렉토리에서 solib-검색-경로에서 순서 내가해야 할 수도 있습니다.전체 솔루션입니다.

할 수도 있습니다 설정 LD_PRELOAD 각각의 라이브러리 또는 LD_LIBRARY_PATH 현재 디렉터리를 호출할 때 gdb.이 경우 문제가 발생 gdb 자체를 사용하려고 어떤 라이브러리 당신은 미리로.

하나의 중요 사항:

만약 당신이 하고 있는 크로스 컴파일하려고 디버깅 gdb,다음 한 후에 당신
file ECECUTABLE_NAME 당신이 볼야.다음과 같:

Using host libthread_db library "/lib/libthread_db.so.1"

음이 있는지 여부를 확인 libthread_db 대상에 대한 시스템입니다.내가 찾는 많은 유사한 문제이다.이러한 문제를 해결할 수 없습니다만"을 사용하여 설정 solib-",당신을 구축 libthread_db 를 사용하여 당신의 크로스 컴파일러로습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top