LLVM调试技巧之Value类

Value是llvm中最重要的一个类,它是最基础的基类

https://llvm.org/doxygen/classllvm_1_1Value.html

一般Value它是有一个类成员提供这个对象的名字的,这个名字作为创建时用户提供的参数。这个成员在调试的时候我认为是有大用的。

bool llvm::Value::hasName	(		)	const
StringRef Value::getName	(		)	const
StringRef Value::getName() const {
  // Make sure the empty string is still a C string. For historical reasons,
  // some clients want to call .data() on the result and expect it to be null
  // terminated.
  if (!hasName())
    return StringRef("", 0);
  return getValueName()->getKey();
}
ValueName *Value::getValueName() const {
  if (!HasName) return nullptr;
 
  LLVMContext &Ctx = getContext();
  auto I = Ctx.pImpl->ValueNames.find(this);
  assert(I != Ctx.pImpl->ValueNames.end() &&
         "No name entry found!");
 
  return I->second;
}
 
LLVMContext &Value::getContext() const { return VTy->getContext(); }

DenseMap类似于C++标准库里的std::map

class LLVMContextImpl:{
public:
	DenseMap<const Value*, ValueName*> ValueNames;
}

但是每次调试定位到这个DenseMap的时候,Vistual Studio无法正确显示里面的键值对。