c++ - 如何将调试信息附加到 LLVM Pass 中的指令中
问题描述
我试图LLVM
在运行时从我的优化过程中收集一些信息。换句话说,我想知道编译后特定IR指令的物理地址。所以我的想法是将LLVM
元数据转换为LLVM
可以在运行时使用的 DWARF 数据。我不想附上文件名和行号,而是附上我自己的信息。我的问题分为两部分:
这是一个可以获取指令的文件名和行号的代码:
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);
推荐阅读
- twitter-bootstrap - 为什么我的导航栏没有向右对齐?
- r - 如何根据 R 中的特定行值对列进行子集化?
- reactjs - 如何使用钩子和功能组件更改 flatList 中仅一项的样式
- javascript - useState 不会重新渲染
- hash - 使用巧克力安装软件时出现校验和错误
- javascript - 赛普拉斯/Javascript - 尝试单击尚未选择的按钮
- node.js - 猫鼬:findOne 填充条目不存在
- java - 如何将此 int 转换为布尔值?
- ios - 线程 1:“UITableView 数据源为索引路径处的行返回了一个 nil 单元格:
我是 swift 的新手。我正在尝试从此链接运行旧教程中的代码。我已经根据编译器指令成功解决了语言兼容性问题。我已成
- javascript - 如何使用带有 Express API 的 reactjs 中的 get API 从前端获取变量到后端