xref: /freebsd/contrib/llvm-project/lldb/bindings/interface/SBFunctionDocstrings.i (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1*06c3fb27SDimitry Andric %feature("docstring",
2*06c3fb27SDimitry Andric "Represents a generic function, which can be inlined or not.
3*06c3fb27SDimitry Andric 
4*06c3fb27SDimitry Andric For example (from test/lldbutil.py, but slightly modified for doc purpose),::
5*06c3fb27SDimitry Andric 
6*06c3fb27SDimitry Andric         ...
7*06c3fb27SDimitry Andric 
8*06c3fb27SDimitry Andric         frame = thread.GetFrameAtIndex(i)
9*06c3fb27SDimitry Andric         addr = frame.GetPCAddress()
10*06c3fb27SDimitry Andric         load_addr = addr.GetLoadAddress(target)
11*06c3fb27SDimitry Andric         function = frame.GetFunction()
12*06c3fb27SDimitry Andric         mod_name = frame.GetModule().GetFileSpec().GetFilename()
13*06c3fb27SDimitry Andric 
14*06c3fb27SDimitry Andric         if not function:
15*06c3fb27SDimitry Andric             # No debug info for 'function'.
16*06c3fb27SDimitry Andric             symbol = frame.GetSymbol()
17*06c3fb27SDimitry Andric             file_addr = addr.GetFileAddress()
18*06c3fb27SDimitry Andric             start_addr = symbol.GetStartAddress().GetFileAddress()
19*06c3fb27SDimitry Andric             symbol_name = symbol.GetName()
20*06c3fb27SDimitry Andric             symbol_offset = file_addr - start_addr
21*06c3fb27SDimitry Andric             print >> output, '  frame #{num}: {addr:#016x} {mod}`{symbol} + {offset}'.format(
22*06c3fb27SDimitry Andric                 num=i, addr=load_addr, mod=mod_name, symbol=symbol_name, offset=symbol_offset)
23*06c3fb27SDimitry Andric         else:
24*06c3fb27SDimitry Andric             # Debug info is available for 'function'.
25*06c3fb27SDimitry Andric             func_name = frame.GetFunctionName()
26*06c3fb27SDimitry Andric             file_name = frame.GetLineEntry().GetFileSpec().GetFilename()
27*06c3fb27SDimitry Andric             line_num = frame.GetLineEntry().GetLine()
28*06c3fb27SDimitry Andric             print >> output, '  frame #{num}: {addr:#016x} {mod}`{func} at {file}:{line} {args}'.format(
29*06c3fb27SDimitry Andric                 num=i, addr=load_addr, mod=mod_name,
30*06c3fb27SDimitry Andric                 func='%s [inlined]' % func_name] if frame.IsInlined() else func_name,
31*06c3fb27SDimitry Andric                 file=file_name, line=line_num, args=get_args_as_string(frame, showFuncName=False))
32*06c3fb27SDimitry Andric 
33*06c3fb27SDimitry Andric         ..."
34*06c3fb27SDimitry Andric ) lldb::SBFunction;
35*06c3fb27SDimitry Andric 
36*06c3fb27SDimitry Andric %feature("docstring", "
37*06c3fb27SDimitry Andric     Returns true if the function was compiled with optimization.
38*06c3fb27SDimitry Andric     Optimization, in this case, is meant to indicate that the debugger
39*06c3fb27SDimitry Andric     experience may be confusing for the user -- variables optimized away,
40*06c3fb27SDimitry Andric     stepping jumping between source lines -- and the driver may want to
41*06c3fb27SDimitry Andric     provide some guidance to the user about this.
42*06c3fb27SDimitry Andric     Returns false if unoptimized, or unknown."
43*06c3fb27SDimitry Andric ) lldb::SBFunction::GetIsOptimized;
44