簡體   English   中英

我可以內聯應用到源位置信息嗎?

[英]Can I get inlining to apply to source location information?

我正在用類似 C 的語言編寫代碼,並且正在使用inline function 實際上確實傾向於內聯。 但是,根據編譯器添加的調試信息(例如,GCC 添加的 DWARF),內聯會維護該函數源中的位置。

是否可以讓編譯器內聯函數的代碼,同時將指令歸因於 function 內聯的行?

為了討論起見,假設我正在編寫 C++ 並在 Linux 上使用 GCC 進行編譯(盡管感謝更一般的答案)。

(動機與分析有關,您只對您所在的 function 進行采樣,但不要對整個堆棧進行采樣。)

artificial function 屬性執行以下操作:

artificial

此屬性對於小型內聯包裝器很有用,如果可能的話,它們應該在調試期間作為一個單元出現。 根據調試信息格式,它要么意味着將 function 標記為人工,要么將調用者位置用於內聯體內的所有指令。

__attribute__指令的放置有點棘手。 這是推薦的地方:

inline void __attribute__ ((artificial))
increment (int &i)
{
  ++i;
}

這與 C++ 語法中的地方不同:

[[gnu::artificial]]
inline void
increment (int &i)
{
  ++i;
}

artificial屬性被 Clang 和從它派生的編譯器識別。

暫無
暫無

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

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