试图用gdb调试一个LLVM, gdb说没有找到调试符号
Trying to debug an LLVM pass with gdb , gdb says no debugging symbols found ?
我想用gdb调试我的LLVM pass。我用默认的make来构建llvm,所以应该添加调试信息。
当我执行gdb user/bin/opt时,它显示:
从opt中读取符号(没有找到调试符号)…
这不应该发生,因为根据LLVM文档,'opt有很多调试信息'
http://llvm.org/docs/WritingAnLLVMPass.html debughints
这是因为我没有正确构建LLVM吗?
找到了完整的方法:->
首先确保LLVM是用调试选项编译的,这基本上是默认设置。如果您没有使用非默认选项编译LLVM,那么您当前的构建应该没问题。
所有LLVM通道都使用LLVM的opt(优化器)工具运行。pass被编译成共享对象文件,即LLVMHello。所以文件在build/lib中,然后由opt工具加载。为了调试或逐步通过,我们必须在LLVM开始执行。so文件之前停止它,因为没有办法在共享目标文件中放置断点。相反,我们可以在调用传递之前在代码中添加一个断点。
我们将在llvm/lib/IR/Pass.cpp
中设置一个断点方法如下:
步骤1 ->导航到build/bin并打开终端并输入gdb opt。如果你在编译llvm时添加了调试符号,那么gdb将需要一些时间来加载调试符号,否则gdb会显示加载调试符号…(没有找到调试符号)。
步骤2 ->现在,我们需要在Pass.cpp中的void Pass::preparePassManager(PMStack &)方法中设置一个断点。这可能是加载传递所涉及的第一个(或第一个)方法。你可以在终端输入break llvm::Pass::preparePassManager。
步骤3 ->运行pass。我有一个位码文件叫trial。bc和相同的LLVMHello。所以我输入
run -load ~/llvm/build/lib/LLVMHello。所以-你好<~/llvmexamples/审判。/dev/null
gdb现在将停止在Pass:: preparePassManager,从这里开始我们可以使用step和next来跟踪执行。
- 带有 GDB 调试器的 VS 代码内存视图
- 使用 Windows 10 和 MINGW 编译器在 VS Code 上使用 gdb 调试器进行调试时出错
- 使用 ssh 重新连接到远程 Ubuntu 机器后,如何继续使用 gdb 调试 c++ 代码?
- 标识gdb调试器中符号的源文件名
- 如何在启动过程中崩溃时使用 gdb 调试可执行文件
- 使用 gdb 调试 linux 守护程序的初始启动
- 如何在使用 gdb 调试期间从 stdin 读取
- GDB 调试器访问未找到的文件
- "gdb"调试器奇怪地跳过断点
- VS Code 上的简单 GDB C++调试失败,并显示 NullReferenceException
- 如何使用 gdb 调试 LLVM 检查器时以图形方式查看 CFG
- 在用GDB调试核心转储时,知道谁是继承者
- 如何通过GDB调试nodejs addon
- gdb 7.5.1调试通过g 4.7.2构建的可执行文件的问题
- 如何在我自己的全系统模拟器上实现 GDB 调试
- 使用GDB调试时,分段故障消失
- 找不到GDB调试符号
- 如何在 Eclipse 中启动 gdb 调试之前运行 linux 脚本
- 如何使用 GDB 调试插件
- 如何使用 GDB 调试 GUI 程序