2012-07-19 14 views
13

C++ 프로그램 내에서 addr2line (함수 호출을 역 추적하는 파일과 행)에서 제공하는 정보를 가져와야합니다. addr2line과 비슷한 라이브러리 호출이 있습니까?addr2line에 대한 라이브러리 호출이 있습니까?

편집 : Linux 환경에서 작업하고 있습니다.

나는 addr2line을 직접 호출 할 수 있으며 내 프로그램 (GPL 라이센스가 있음)에 source code의 addr2line을 사용할 수 있음을 알고 있습니다. 하지만 라이브러리 함수를 호출하는 것이 더 깔끔하다고 생각합니다.

편집 : addr2line과 마찬가지로 binutils의 bfd를 사용합니다. 어쨌든 bfd는 무엇을 의미합니까?

+0

libdwarf는 무엇을 찾고 계신가요? –

+0

제안에 감사드립니다. 나는 dwarfdump를 시도하고 함수가 선언 된 곳, 호출되는 곳만 출력한다. 괜찮은 문서를 찾을 수 없었습니다 ... – steffen

+2

'bfd'는 http://en.wikipedia.org/wiki/Binary_File_Descriptor_library입니다. 원래는 BFD의 다른 의미를 나타 냈지만 :) – ecatmur

답변

6

dladdr()을 사용해 볼 수 있습니다. 디버깅 정보가 아닌 프로그램의 동적 기호를 사용합니다 (프로그램을 gcc -rdynamic으로 컴파일하십시오).

또한 backtrace 라이브러리 또는 상위 레벨 stacktrace 라이브러리를 확인할 수 있습니다.
정확히 무엇을 묻고 싶지는 않지만 유용한 것으로 입증 될 수 있습니다.

+1

tipps 주셔서 감사합니다. 'dladdr()'을 사용하면 필자가 맨 페이지를 올바르게 이해할 수 있다면, 동적으로 링크 된 코드와 라인 만이 아닌 파일 이름에 대한 정보를 얻을 수있다. 이미 주소를 얻으려면 백 트레이스를 사용하고 있습니다. 지금 필요한 것은 주소에서 파일과 라인을 가져 오는 것입니다. stacktrace는 백 트레이스를위한 단순한 래퍼입니다. – steffen

+0

이 외에도'libunwind' 라이브러리가 있습니다 : http://www.nongnu.org/libunwind/ –