如何将调试信息附加到LLVM通行证中的指令中
How to attach debug information into an instruction in a LLVM Pass
我试图在运行时从我的LLVM
优化通过中收集一些信息。换句话说,我想知道编译后特定的IR指令的物理地址。因此,我的想法是将LLVM
元数据转换为可以在运行时使用的LLVM
矮人数据。我不想附加自己的信息,而不是附加文件名和行号。我的问题分为两个部分:
-
这是一个可以获取指令的文件名和行号的代码:
if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction unsigned Line = Loc->getLine(); StringRef File = Loc->getFilename(); StringRef Dir = Loc->getDirectory(); bool ImplicitCode = Loc->isImplicitCode(); }
但是如何设置此字段?我找不到相关功能。
- 如何在(文件名和行号)运行时看到更新的调试信息?我使用
-g
进行编译,但我仍然看不到调试信息。
谢谢
您需要的函数setDebugloc(),并且如果包含足够的内容,则信息仅包含在结果中。模块验证者会告诉您您缺少的内容。这两行也可能是绊倒你的东西。
module->addModuleFlag(Module::Warning, "Dwarf Version", dwarf::DWARF_VERSION);
module->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);
相关文章:
- 如何将 I->getType() 作为参数传递给 llvm 中的 CreateCall?
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- llvm构建器向基本块添加终止符
- 正在LLVM中检测整数比较条件
- 如何在LLVM中dyn_cast以识别StoreInst?
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- 编译 llvm 3.1 时,为什么会出现错误:在">"标记之前预期主表达式
- 如何删除 LLVM 中的不规则分支?
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 从macOS Catalina上的源代码编译LLVM(如何解决未找到"stdio.h")
- LLVM 选择找不到函数传递
- LLVM 通行证:破坏库未与传递库链接
- 如何将 Haskell LLVM 通行证与 C++ LLVM 通行证(如果有的话)集成
- 如何将调试信息附加到LLVM通行证中的指令中
- LLVM 3.8:使用AD IDE(XCODE)实现通行证
- 集成 LLVM 通行证