You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试时如何导出llvm::instruction的文本格式(VSCode+GDB)

在VSCode搭配GDB调试时导出指定指令文本格式的可行方法

方法1:直接使用GDB命令重定向导出

在VSCode的调试控制台中,用GDB的disassemble命令结合文件重定向,直接将指定指令输出到文本文件:

  • 导出指定函数的指令:
    disassemble main > /your/path/instructions.txt
    
  • 导出指定地址范围的指令:
    disassemble 0x0000555555555120, 0x0000555555555150 > /your/path/instructions.txt
    

方法2:通过VSCode调试日志提取指令

修改.vscode/launch.json配置,开启调试日志并指定输出文件,日志中会包含调试过程中的指令信息,后续可从日志文件中提取需要的内容:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gdb Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/your_program",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "externalConsole": false,
            "MIMode": "gdb",
            "logging": {
                "engineLogging": true,
                "output": "/your/path/debug_log.txt"
            }
        }
    ]
}

方法3:编写GDB脚本自动导出

创建GDB脚本文件(如export_instructions.gdb),编写自动导出逻辑:

# 在main函数处断点
break main
# 启动程序
run
# 导出main函数的指令到文件
disassemble main > /your/path/instructions.txt
# 继续执行程序
continue

然后在launch.json中配置加载该脚本:

{
    // ... 其他配置项
    "initCommands": [
        "source ${workspaceFolder}/export_instructions.gdb"
    ]
}

启动调试后,脚本会自动完成指令导出操作。

针对LLVM项目调试的补充说明

如果是调试LLVM相关代码,之前用的I->dump()和I->print(errs())未生效,大概率是调试时标准输出未被捕获或未正确重定向。可以改用raw_fd_ostream直接将指令写入文件:

#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/Instruction.h"

// ... 你的代码逻辑
llvm::raw_fd_ostream output_file("llvm_instructions.txt", true);
I->print(output_file);
output_file.flush();

编译运行后,指令会直接写入指定的文本文件中。

内容的提问来源于stack exchange,提问作者Shore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:35:24