问题
I've used Clang to compile a function with debug information enabled. For Instruction
s there's the handy getDebugLoc()
, but there's no such thing for Function
s. Given a Function
instance, how can I get the debug information (I'm guessing in DISubProgram
form) for it?
I've seen the guide entry explaining how that debug information is represented, and the metadata does contain a link back to the function, but there's apparently no link back. Am I supposed to iterate over all the metadata in the module?
回答1:
I don't think there's currently an easier way. There used to be a global metadata node that collected all function metadata entries (llvm.dbg.sp
) but it was removed a while ago in favor of llvm.dbg.cu
which reflects the DWARF structure more closely.
I suppose that the common uses of debug metadata don't require by-function lookup, and any extra information that could be removed, was removed, because saving space is important and metadata in IR is already way too big.
回答2:
I think you need to use the DebugInfoFinder. Here is a sample code:
DebugInfoFinder Finder;
Finder.processModule(M);
for (DebugInfoFinder::iterator i = Finder.subprogram_begin(),
e = Finder.subprogram_end();
i != e; ++i) {
DISubprogram S(*i);
if (S.getFunction() == F) {
errs() << S.getLineNumber(); << "\n";
}
}
where F is the function you are looking for.
回答3:
you can use getSubprogram() as describled in doxygen: Function class
来源:https://stackoverflow.com/questions/18351299/how-do-i-get-debug-information-from-a-function