[英]How to capture line number within existing code in C/C++?
我正在嘗試對現有程序進行一些分析,並且需要在不過多修改程序的情況下記錄行號。 我一直在玩__LINE__
並希望做這樣的事情:
文件.h:
void Function( int iLine = __LINE___ ); // original function had no arguments, but now overloaded to default __LINE__
文件.cpp:
void Function( int iLine ) { // original function had no arguments, but now changed to int iLine
// do something here
// log iLine number to a file for analysis
}
main.cpp調用:
Function(); // call existing function
但是,我現在知道這不會起作用,因為iLine
始終是file.h
定義行號。
我試過 StackWalker,但也有困難,而且似乎有點矯枉過正。
關於如何在保持原始文件更改最小的同時解決此問題的任何建議?
選項 1:使用像宏這樣的函數而不是函數。 宏將擴展到“調用”站點,從而給出正確的行。 宏本身可能就像將參數傳遞給適當的函數一樣簡單。
選項 2:改用std::source_location
,它將在即將到來的 c++20 中引入。
您可以查看ASSERT()
宏是如何定義的。
如果我沒記錯的話,大概是這樣的:
#define ASSERT(x) _assert( (x), __FILE__, __LINE__ );
void _assert( bool expression, const char* pfile, int line );
因此, ASSERT()
宏用作_assert()
函數的包裝器,因此它在調用站點被擴展,與目標函數是否被內聯無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.