使用模板除錯 c 程式時,輸出很快就會變得不可讀。出于這個原因,在除錯會話期間,重寫縮短的特定型別名稱會很方便。
例如
void std::__1::vector<std::__1::tuple<unsigned long,
state_change_t,
some::namespace::Board<some::namespace::Tile, unsigned long, 42ul>,
some::namespace::Path<unsigned int, unsigned int>>,
std::__1::allocator<std::__1::tuple<unsigned long,
state_change_t,
some::namespace::Board<some::namespace::Tile, unsigned long, 42ul>,
some::namepsace::Path<unsigned int, unsigned int>
>
>
>::some_interesting_method
這樣的條目可以在回溯的單行中多次出現;這很快變得無法控制。因此,將其縮短為類似于以下內容會很方便
void void std::__1::vector<my_known_type,
std::__1::allocator<my_known_type>
>::some_interesting_method
如何才能做到這一點?
uj5u.com熱心網友回復:
Clang 有一個名為的屬性preferred_name,可用于為編譯時診斷創建模板別名。它需要一些前向宣告,如下所示:
template<typename T>
struct Heap;
using IntHeap = Heap<int>;
template<typename T>
struct [[clang::preferred_name(IntHeap)] Heap;
// Possibly add implementation, don't have to yet.
不幸的是,自 2021 年 9 月以來,clang 在撰寫除錯符號時不會使用它。有一個郵件串列執行緒討論此更改,差異在這里。
Clang 版本 12 和 13 仍應在除錯符號中使用首選名稱,但這是一個非常狹窄的版本視窗。
打開一張票,要求在除錯符號中添加一個啟用首選名稱的標志可能是值得的 - 這似乎是一個非常微不足道的實作功能并且非常有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/433976.html
