VS2017调试器:没有地址,可能是由于编译器优化



似乎与某些具有类似标题的问题无关。

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

注意:"Lookup"是clang::D irectoryLookup http://clang.llvm.org/doxygen/classclang_1_1DirectoryLookup.html,"Lookup->getName(("是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程序期间,这种情况发生在其他情况下,这使得调试变得非常困难。

可能的原因是什么以及如何解决?

我尝试了@user15331850解决方案,但没有帮助,但是将链接器>调试>生成调试信息设置为"/DEBUG:FULL"现在似乎给了我所有变量。

这可能是由于启用了优化选项。 您可以按照以下步骤禁用相同的功能:

  • 右键单击解决方案
  • 点击"属性">
  • 在左窗格中,单击"配置属性">
  • 从子选项中单击"C/C++">
  • 然后单击"优化"并从列表中选择"禁用(/Od(">

就是这样。希望它对你有用!!

我遇到了这个问题。 我需要更改以下设置:链接>调试>生成调试信息从"/DEBUG:FASTLINK"到"/DEBUG"。

最新更新