簡體   English   中英

從函數返回的位置獲取行號

[英]Getting a line number from where a function returned

我有一個cpp函數,它具有基於不同標志集和不同控制流的多個返回點。 有沒有一種方法可以確定使用了哪個return語句,而不必為每個return語句添加調試行? (很難僅從返回值中得出返回點)

我已經使用RAII記錄了函數的進入和退出。 而且我需要能夠記錄返回的行號。

我嘗試搜索此問題,但沒有找到任何接近我想要的東西

return_type fun(args)更改為pair<return_type, unsigned int> fun(args)並使用return make_pair<return_type, unsigned int>(val, __LINE__) return val

您可以做的一件事是將方法的返回類型更改為Tuple

Tuple中的元素之一就是您的原始返回值。

第二個元素可以利用__LINE__宏。 您可以返回行號,也可以返回一個String其中包括行號以及有關返回點的其他可能的信息記錄信息。

您可以在日志語句中使用標准的__LINE__預定義宏:

gcc文檔中

該宏以十進制整數常量的形式擴展為當前輸入行號。 盡管我們將其稱為預定義宏,但它卻是一個非常奇怪的宏,因為其“定義”隨源代碼的每一行而變化。

理想情況下,使代碼更簡單,減少返回點的數量,或者在返回值本身中包含有關返回點的信息。

您可以使用預處理器宏:

#define return std::cerr << __FILE__ << ":" << __LINE__ << " return " << std::endl; return 

就在您的函數定義之前。 和:

#undef return

因此,您不會收到很多您不關心的帶有return s的日志消息。

編輯:順便說一句,如果您有一個RAII對象用於記錄功能條目,則可以執行以下操作:

#define return entry_raii_object.exited_at(__LINE__); return

不要忘記稍后取消定義。 我個人更希望使用其他關鍵字來進行日志記錄的返回,例如#define logged_return ...; return #define logged_return ...; return

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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