2014-04-30 2 views
5

GDB가 내 소스 파일이 실행 파일보다 최근에 불만을 제기하고 있으며 디버깅 정보가 실제로 소스 파일의 이전 버전과 관련되어 있다고 생각합니다. GDB는 빈 줄에 중단된다"소스 파일이 실행 가능 파일보다 최근 임"

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000000000 in ??() 
(gdb) up 
#1 0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246 
warning: Source file is more recent than executable. 
246 
(gdb) list 
241    if (versionBytes == CB_HD_KEY_VERSION_TEST_PUBLIC 
242      || versionBytes == CB_HD_KEY_VERSION_TEST_PRIVATE) 
243      return CB_NETWORK_TEST; 
244 
245    return CB_NETWORK_UNKNOWN; 
246 
247  } 
248 
249  uint8_t * CBHDKeyGetPrivateKey(CBHDKey * key) { 
250 

을하지만 실행 파일이 원본 파일보다 최신 여기를 참조 :

내가 make cleanccache -C하지만이 같은 문제가 발생 후 재건 노력
$ ls -l library/src/CBHDKeys.c 
-rw-r--r-- 1 matt matt 9249 Apr 29 22:40 library/src/CBHDKeys.c 
$ ls -l bin/noLowerAddressGenerator 
-rwxr-xr-x 1 matt matt 17845 Apr 30 15:52 bin/noLowerAddressGenerator 

. 소스 파일을 업데이트했을 때 공백 만 추가 했으므로 프로그램 논리는 동일하게 유지됩니다. 그와 관련이 있다고 생각하지만, ccache를 지우고 빌드 및 bin 디렉토리를 지우고 나서 make clean으로 무엇이 있는지 잘 모르겠습니다. 계속.

버전 : 3.81

  • GCC를 확인

    • GNU (데비안 4.8.2-16) 4.8.2
    • GNU gdb를 (GDB) 7.6.2 (데비안 7.6.2-1)
    • ccache 버전은 3.1.9
    • SolydXK - SMP 데비안은 3.13.5-1 (2014년 3월 4일)
    • 아마도
  • +1

    'CBKeyPairGenerate'는 함수 이름이고'noLowerAddressGenerator'는 실행 파일입니다. –

    +0

    명백한 확인 : gdb가 선택할 수있는 경로에 다른 noLowerAddressGenerator exes가 없다고 가정합니다. –

    +0

    noLowerAddressGenerator는 하나 뿐이며 파일의 정확한 경로를 전달할 때 gdb가 어디에서 파일을 섞을 수 있습니까? –

    답변

    0

    당신은 가장을 사용하지 않는 최근에 컴파일 된 코드 버전 (공유 라이브러리에있는 경우) 프로그램의 라이브러리 종속성을 보려면 ldd noLowerAddressGenerator을 사용할 수 있습니다. GDB 내에서 관련 라이브러리를 찾을 수 있는지는 모르겠지만 방법이 있어야합니다 (방법을 알고 있다면 주석 달기 또는 편집하십시오).

    이 경우 실제로 프로그램을 실행하기 전에 GDB에서 set environment LD_LIBRARY_PATH을 사용하여 새로 빌드 한 라이브러리를 설치된 라이브러리보다 먼저 배치 할 수 있습니다. 연결시 ELF 변수 RPATH을 설정할 수 있지만 그 정도면 도움이 될 수 있습니다.

    또 다른 가능성은 라이브러리가 설치되어 있지 않은 시스템에서 디버거를 실행하는 것입니다. schroot을 사용하여 빌드/디버그/설치 환경을 분리 된 상태로 유지하면서 좋은 결과를 얻었습니다.

    관련 문제