[英]How to map a function name and line number by a memory address in C language?
如何在GCC中將函數名稱和行號與內存地址映射起來?
即假設使用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可以滿足我的要求?
非常感謝您的任何答復;-P
如果包含標題
#include <execinfo.h>
那么您可以使用backtrace()
函數確定調用行的地址,並使用backtrace_symbols()
檢索函數的名稱。 但是,這不會給您行號(盡管如果您需要的話,它可能會提供足夠的信息來幫助調試)。
如果您確實需要線號,則需要:
-g
gcc標志) addr2line
程序將地址(從backtrace()
檢索)轉換為文件/行號引用。 例如,您可以使用system()
從程序中調用它。 它將把輸出發送到stdout,但是如果需要,您可以使用重定向或管道來捕獲輸出。 使用gcc,您可以使用回溯功能來做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.