簡體   English   中英

如何在 C/C++ 中的現有代碼中捕獲行號?

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

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