最近在做LLVM有关的项目,需要将LLVM Pass中的部分结果写到文件中。网上找了半天,都没有教程,看了很多源码,只有很多用errs()和out()函数打印信息到屏幕的,也试过用 tee 命令将ubuntu命令行输出写到文件,可是出现了乱码。 最后在高人指点下,经过自己半天的摸索终于解决了。
key word: raw_fd_ostream, StringRef, error_code
1. 头文件准备
需要的头文件为:
#include "llvm/Support/raw_ostream.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/SmallString.h
2. 编写主要代码
主要就是将要写到文件的内容(Instruction等),写到 raw_fd_ostream 中。
std::string filename("t.txt");
StringRef sr(filename);
std::error_code ec;
raw_fd_ostream os(sr, ec);
os << *ii << "\n";
完成!
3. 直接将整个block写入
代码类似:
std::vector<BasicBlock*> bbs = L->getBlocks();
os << *bbs[0] << "\n";
|