當我想通過調整向量大小來更改正在除錯的程式的執行時,但出現錯誤:
(lldb) expression std_vector_foo.resize(1)
error: Couldn't lookup symbols:
std::vector<string_id<mtype>, std::allocator<string_id<mtype> > >::resize(unsigned long)
奇怪的是,以下運行良好:
expression std_vector_foo.reserve(1)
uj5u.com熱心網友回復:
有兩種方法可以解決缺少要呼叫的模板方法的問題。
最直接的——如果它適合你的話——是打開構建“stl 模塊”以在運算式決議器中使用,方法是:
settings set target.import-std-module 1
在你的 ~/.lldbinit 中。這將導致 lldb 為 stl 庫構建一個“clang 模塊”,lldb 可以根據需要構建所需的專業化。然而,這是一個相當新的功能,并且很難開始作業,所以 YMMV...我不知道 GNU STL 是否是可模塊化的,所以它可能只適用于最新版本的 clang STL。""Modules" 原來是一個高度多載的術語;在這種情況下,它意味著 clang 功能:
https://clang.llvm.org/docs/Modules.html
如果您確實發現了這方面的問題,請通過http://bugs.llvm.org提交錯誤。
如果這不起作用,使這些方法可用的蠻力方法是將等效于:
template class std::vector<string_id<mtype>>;
對于您嘗試訪問其中一個源檔案的方法的任何型別。這會強制編譯器發出此類專業化的完整版本,從而為您留下可以呼叫的方法。當然,這也會使您的代碼膨脹,并且您必須通過專門化來專門化它,因此這不是通用的解決方案。盡管如此,把它放在你的后兜里還是一個有用的技巧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405051.html
標籤:
