Отладчик VS2017: не имеет адреса, возможно, из-за оптимизации компилятора - PullRequest
0 голосов
/ 12 января 2020

Кажется неуместным для некоторых вопросов с похожими заголовками.

//some other code
std::string s = Lookup->getName().str();
-> break here //some other code

Примечание: «Lookup» - это clang :: DirectoryLookup http://clang.llvm.org/doxygen/classclang_1_1DirectoryLookup.html, «Lookup-> getName ()» is llvm :: StringRef http://llvm.org/doxygen/classllvm_1_1StringRef.html.

При разрыве в вышеуказанном месте на панели «Наблюдение» в 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, и это делает отладку очень сложной.

Что такое возможная причина и как ее решить?

1 Ответ

0 голосов
/ 12 января 2020

Это может быть связано с тем, что опция оптимизации включена . Вы можете отключить то же самое, выполнив следующие действия:

  • Щелкните правой кнопкой мыши на решении
  • Нажмите на "свойства"
  • Из на левой панели нажмите «Свойства конфигурации»
  • Нажмите «C / C ++» в подопции
  • Затем нажмите «Оптимизация» и выберите «Отключено (/ Od)» из списка

Вот и все. Надеюсь, у вас это получится !!

...