簡體   English   中英

如何用C語言的內存地址映射功能名稱和行​​號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM