함수 이름과 줄 번호를 GCC의 메모리 주소로 어떻게 매핑 할 수 있습니까?함수 이름과 행 번호를 메모리 주소로 C 언어로 매핑하는 방법은 무엇입니까?
즉 C 언어의 프로토 타입 가정 :
void func() {
// Get the address of caller , maybe this could be avoided
MemoryAddress = get_call_address();
// Which line from source code is executing , which calls func()
LineNumber = get_lineno_from_symbol (&MemoryAddress);
// Grab the name who calls func()
FunctionName = get_func_from_symbol (&MemoryAddress);
}
그래서 GCC 또는 무엇이든에서 제공하는 기존의 API가, 내 요구 사항을 충족 할 수 있습니까? 당신은 당신이를 검색 할 backtrace_symbols()
를 호출 라인의 주소를 결정하기 위해 backtrace()
function을 사용하고 있습니다 헤더를
#include <execinfo.h>
을 포함 할 경우 중 하나가 ;-P
소프트웨어에 기능이 필요합니까 아니면 디버깅 용입니까? 디버깅 용이라면 맵 파일이나 미리 정의 된 _ _ LINE _ _ 및 _ _ FILE _ _ 매크로를 사용할 수 있습니다. – Dave
프리 프로세서는 파일 & 라인 번호를 줄 수 있습니다. 예 : \t fprintf (stdout, "% s % d \ n", _ _ FIL E_ _, _ _ LINE _ _); 이중 밑줄 사이에 간격이 없습니다. ;-) –
아니요, __LINE__은 전혀 도움이되지 않습니다. 나는 동적으로 소스 코드의 일부가 실패한 정보와 backtrace() 메모리 주소를 제공 할 필요가있다. psmears가 가장 좋은 해결책을 주었다. 모두 감사한다. -P – daisy