[LLVMdev] get function local debug info?

David Blaikie dblaikie at gmail.com
Sun Nov 3 06:58:27 PST 2013


+llvmdev because I accidentally dropped it
On Nov 3, 2013 6:57 AM, "David Blaikie" <dblaikie at gmail.com> wrote:

> You're welcome to provide a patch or I might get to it myself. Also this
> should be described in http://llvm.org/docs/SourceLevelDebugging.html if
> it isn't already
> On Nov 3, 2013 12:11 AM, "lu zhao" <luzhao at cs.utah.edu> wrote:
>
>>  Hi David,
>>
>> Thank you! Your suggested method works.
>>
>> I think that you or someone should write what you said in the comments
>> for the getVariable() function. :)
>>
>> Best,
>> Lu
>>
>> On 11/03/2013 06:30 AM, David Blaikie wrote:
>>
>>
>>
>>
>> On Sat, Nov 2, 2013 at 4:17 PM, lu zhao <luzhao at cs.utah.edu> wrote:
>>
>>>  Hi,
>>>
>>> If I have an instance of DISubprogram, can I get the debug info of local
>>> variables of the function, including parameters?
>>>
>>> I tried to use the getVariables() function defined in DISubprogram, but
>>> it seemed to return an empty DIArray node when I ran my pass alone using
>>> opt. Do I need to enable any other analysis passes in order to populate the
>>> data?
>>>
>>> My related snippet of code is like the following:
>>>
>>>     NamedMDNode *M_Nodes = M.getNamedMetadata("llvm.dbg.cu");
>>>     for (unsigned i = 0, e = M_Nodes->getNumOperands(); i != e; ++i) {
>>>       DIArray SPs = CU.getSubprograms();
>>>       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++ i) {
>>>         DISubprogram SP(SPs.getElement(i));
>>>         DIArray Vars = SP.getVariables();
>>>         for (unsigned i2 = 0, e2 = Vars.getNumElements(); i2 != e2;
>>> ++i2) {
>>>           DIVariable DV(Vars.getElement(i));
>>>           DV.print(errs()); errs() << " : "; DV.getType().dump();
>>>         }
>>>       }
>>>     }
>>>
>>> In addition, can I use DebegInfo to get the list of parameters (var
>>> names and types) of a subprogram? or I have to parse the underlying
>>> metadata and build the relationship?
>>>
>>
>>  Basically this /\. We use the variables list (the getVariables function
>> you mentioned) to persist the variables in optimized (above -O0) builds,
>> but at -O0 we save metadata space by not emitting the list and relying on
>> the dbg_value/declare intrinsics to keep the variable metadata alive and
>> the variables to refer to their scope (lexical blocks (that refer to
>> subprograms) or subprograms).
>>
>> So you'd have to walk all the instructions looking for dbg_declare/value
>> (I forget which, perhaps both) and trace those back to the DIVariables,
>> etc...
>>
>>
>>>
>>> Thanks,
>>> Lu
>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131103/9df4fc9d/attachment.html>


More information about the llvm-dev mailing list