Кажется, не относится к некоторым вопросам с похожими заголовками.
//some other code
std::string s = Lookup->getName().str();
-> break here //some other code
Примечание. «Поиск» — это clang::DirectoryLookup http://clang.llvm.org/doxygen/ classclang
1DirectoryLookup.html, «Поиск->getName()» — это llvm::StringRef http:/ /llvm.org/doxygen/classllvm//some other code
std::string s = Lookup->getName().str();
-> break here //some other code
1StringRef.html.//some other code
std::string s = Lookup->getName().str();
-> break here //some other code
При разрыве в указанном выше месте на панели «Наблюдение» в VS2017 строковая переменная «s» успешно инициализируется, и ее значение может отображаться на панели «Наблюдение».
Но когда вы пытаетесь показать (смотреть) выражение «Lookup->getName().str()», которое именно так инициализирует «s», оно говорит:
Lookup->getName().str() | Function llvm::StringRef::str has no address, possibly due to compiler optimizations.
исходный код StringRef::str():
/// str - Get the contents as an std::string.
LLVM_NODISCARD
std::string str() const {
if (!Data) return std::string();
return std::string(Data, Length);
}
И все библиотеки в отладочной версии. Исходя из вышеизложенного, кажется, что для этого нет никаких причин.
Такое происходит и в других ситуациях во время отладки программы Clang Libtooling, и это очень усложняет отладку.
Какова возможная причина и как ее решить?