LLVM与Clang的入口点文件是什么?调试clang命令断点该设置在哪
Clang与LLVM调试必中入口断点说明
Clang侧入口
运行clang -S -emit-llvm foo.c命令时,以下位置是100%会命中的断点:
- 进程启动最顶层入口:
main函数,定义在Clang源码路径tools/driver/driver.cpp中,只要启动clang进程就会触发,适合用来第一时间验证调试器配置是否正常 - 编译流程执行入口:
clang::driver::Driver::ExecuteCompilation,定义在tools/driver/Driver.cpp中,Clang驱动解析完所有命令行参数后,正式触发编译任务的统一入口,所有编译场景都会走到这里 - 前端动作执行入口:
clang::FrontendAction::Execute,定义在lib/Frontend/FrontendAction.cpp中,Clang前端执行任意编译动作的通用入口,不管你传递什么编译参数都会命中
LLVM侧入口(适配-emit-llvm场景)
针对你当前需要生成LLVM IR的场景,以下LLVM侧的断点必然会命中:
- LLVM上下文初始化入口:
LLVMContext::LLVMContext(),定义在LLVM源码路径lib/IR/LLVMContext.cpp中,所有生成LLVM IR的流程都需要先初始化上下文,只要使用-emit-llvm参数就会触发 - IR生成专属入口:
clang::EmitLLVMAction::ExecuteAction,定义在lib/CodeGen/CodeGenAction.cpp中,是Clang专门处理生成LLVM IR输出的动作入口,只在使用-emit-llvm相关参数时触发,也可以用来验证参数解析逻辑是否正常
调试验证建议
你可以先在main函数打第一个断点,启动调试后如果正常命中,就说明你的调试器符号加载、路径配置都没有问题,再根据你的调试需求打后面的细分断点即可。
内容的提问来源于stack exchange,提问作者Darshan Bhat
相关产品推荐
相关产品推荐

