2010-02-28 3 views
7

나는 mallocs를 근본적으로 mallocs와 다른 것들을 대체하는 LLVM 변환을 작성했다.왜 LLVM 컴파일/링크 프로세스에서 디버그 심볼이 손실 되었습니까?

디버깅 정보가 들어있는 비트 코드 파일 (-emit-llvm 옵션 사용)을 얻기 위해 c 파일을 컴파일하는 데 clang (또는 llvm-gcc)을 사용하고 있습니다. 여기에는 메소드 이름, 행 번호 등이 포함됩니다.

나중에이 비트 코드 파일을 계측하기 위해 opt를 사용하고 있습니다. 결과는 인스트루먼트 된 비트 코드 파일이며 여전히 모든 관련 디버그 정보를 포함합니다.

세 번째이자 마지막 단계에서는 런타임 라이브러리가 필요하기 때문에 llvm-gcc를 사용하여 비트 코드를 다른 바이너리 파일과 링크하여 최종 이진 파일을 얻습니다.

이 바이너리 모든 링크 된 비트 코드 파일에 포함 된 디버그 정보가 없으므로 디버깅 할 수 없습니다. gdb가 말할 수있는 유일한 기능은 우리가 어떤 기능을하지만 라인 번호가없는 것입니다 ...

나는 어떤 힌트에도 감사 할 것입니다.

+0

허용하는 모든 단계에 -g를 전달합니까? – bmargulies

+0

특히 마지막 llvm-gcc 단계 : 그렇지 않으면 -g가 링커에 전달되지 않습니다. –

+3

예 모든 단계에 -g 옵션을 추가했습니다 ... –

답변

1

최적화 도구 (opt 도구는 코드와 디버그 정보를 최적화 함)를 이해하고있는 것으로 알고 있습니다. 디버깅이 최적화 된 디버그 정보의 결과 일 때 누락 된 부분이있을 수 있습니다.

P. 댓글에 이것을 추가 하겠지만 불행히도 댓글을 달기 위해 필요한 평판은 50 가지가 아닙니다.

관련 문제