2011-12-28 2 views
1

주어진 플랫폼에 대한 기본 디버깅 형식을 읽는 방법을 아는 사람이 있는지 궁금합니다.기본 디버깅 형식을 감지하는 명령

나를 더 돕고 싶다면 여기 큰 그림이 있습니다. 11. gub에서 xubuntu 11.10의 라이브러리 (gsl)에있는 일부 소스 파일의 전체 경로를 저장하는 데 문제가 있지만 redhat을 사용하여 바위 클러스터에서 그렇게하지 않습니다. xubuntu에는 gcc 4.6이 있고 빨간 모자에는 4.1가있다; Redhat 클러스터는 x64이고 xubuntu는 x32입니다. 이것들은 제가 알고있는 차이입니다. 문제는 gdb가 우분투에서 소스 파일을 찾지 만 redhat에서는 찾지 못한다는 것입니다. redhat에서는 경로가없는 소스 파일 이름 (정보 소스) 만 저장됩니다. 정말 이상한 점은 (IMO) 두 플랫폼 모두에서 코드와 메이크 파일이 동일하다는 것입니다. 유일한 차이점은 두 경로 모두에서 절대 경로라는 것입니다.

이 시점에서 내 유일한 단서는 어떻게 든 기본적으로 디버깅 형식이 두 플랫폼 모두에서 찌르는 것이 아니라는 것입니다. 그래서 나는 각 플랫폼에있는 것들을 확인하고 싶었다. 하지만 전반적인 문제를 해결할 수 있다면 많이 고맙겠습니다.

답변

1

다른 플랫폼의 바이너리에서 디버깅 정보에 대한 추가 정보를 얻으려면 dwarfdump 유틸리티를 사용해보십시오.

gcc에 인수로 -gstabs를 명시 적으로 요청하지 않은 경우 디버깅 형식이 어느 플랫폼에서든 찌르다면 놀라실 것입니다. DWARF가 오랫동안 Linux intel gcc의 기본값이었습니다. readelf -S <binary>을 사용하여 .stab 또는 .stabstr 섹션을 검색하여 실제로 stab을 사용하는지 확인할 수 있습니다.

+0

안녕하세요. 먼저 도움을 주셔서 감사합니다. -g 및 -gstabs +로 컴파일을 시도했는데 제안한대로 gstabs + 버전에는 .stab 및 .stabstr 섹션이 있습니다. 평범한 것들은 두 플랫폼 모두에있는 것이 아니기 때문에, 나는 둘 모두에'DWARF'라고 가정 할 것입니다. 필자가 알지 못했던 (readelf) 도구를 사용하여 두 바이너리간에 다른 유일한 항목은 xubuntu 버전에있는'NOTE' 유형의'.note.gnu.build-i'입니다 . 관련성이있을 수 있습니까? redhat에서 디버깅 바이너리의 절대 경로를 얻는 방법에 대한 제안이 있습니까? – nixahn

+0

저는 클러스터 관리자가 아니므로 dwarfdump가 설치되지 않았기 때문에 시도 할 수 없습니다. 관리자는 이미 나를 위해 gdb를 설치 했으므로 그 방향으로 너무 많이 밀어 넣을 수는 없습니다 ... – nixahn

+0

글쎄, 여러분은 항상 소스에서 dwarfdump와 libdwarf를 컴파일 할 수 있었고, 이전에 제공 한 링크에 지침이 있습니다. 바이너리가 다른 이유에 대한 훌륭한 아이디어는 없습니다. 그러나 gdb의 'directory'명령을 사용하여 디버그 정보에 경로가 기록되지 않은 곳의 설치 소스를 찾는 위치를 gdb에 알려줌으로써이 모든 문제를 피할 수 있습니다. – acm