[lldb-dev] [RFC] Fast Conditional Breakpoints (FCB)

Adrian Prantl via lldb-dev lldb-dev at lists.llvm.org
Fri Aug 16 08:27:04 PDT 2019



> On Aug 15, 2019, at 2:03 PM, Ismail Bennani via lldb-dev <lldb-dev at lists.llvm.org> wrote:
> 
> I built Clang (and LLVM) in Release Mode with Debug Info (-O2),
> and got these results:
> 
> |   Dwarf Occurences   |    Occurences   |
> |----------------------|-----------------|
> | DW\_OP\_deref        |    1,570        |
> | DW\_OP\_const        |    3,791        |
> | DW\_OP\_addr         |    9,528        |
> | DW\_OP\_lit          |    62,826       |
> | DW\_OP\_fbreg        |    205,382      |
> | DW\_OP\_piece        |    242,888      |
> | DW\_OP\_stack\_value |    992,261      |
> | DW\_OP\_breg         |    1,006,070    |
> | DW\_OP\_reg          |    5,175,831    |
> | **Total**            |  **7,700,147**  |
> 
> 
> I could technically implement the logic to support DW_OP_reg, DW_OP_breg
> and DW_OP_stack_value fairly easily (which still represents 90% of all ops).
> 
> However, DW_OP_piece is a more complex operation since it combines
> several other operations, and would require more work.
> 
> This would also imply that there will 2 DWARF Expression Interpreter in
> LLDB, hence twice as much code to maintain … I’ll try to see if I can
> use the existing interpreter for this feature.

I strongly agree that unless the code can be shared, the JIT-ed DWARF expression interpreter should be kept as simple as possible and aim to support the lion's share of DWARF expressions encountered in a typical program, but making it support 100% is a lot of effort and maintenance burden with very diminishing returns.

-- adrian

> 
> Ismail
> 
>> On Aug 14, 2019, at 3:42 PM, Finkel, Hal J. <hfinkel at anl.gov> wrote:
>> 
>> 
>> On 8/14/19 3:52 PM, Ismail Bennani via lldb-dev wrote:
>>> Hi everyone,
>>> 
>>> I’m Ismail, a compiler engineer intern at Apple. As a part of my internship,
>>> I'm adding Fast Conditional Breakpoints to LLDB, using code patching.
>>> 
>>> ...
>>> 
>>> Since all the registers are already mapped to a structure, I should
>>> be able to support more __DWARF Operations__ in the future.
>>> 
>>> After collecting some metrics on the __Clang__ binary, built at __-O0__,
>>> the debug info shows that __99%__ of the most used DWARF Operations are :
>>> 
>>> |DWARF Operation|         Occurrences       |
>>> |---------------|---------------------------|
>>> |DW\_OP_fbreg   |         2 114 612         |
>>> |DW\_OP_reg     |           820 548         |
>>> |DW\_OP_constu  |           267 450         |
>>> |DW\_OP_addr    |            17 370         |
>>> 
>>> |   __Top 4__   | __3 219 980 Occurrences__ |
>>> |---------------|---------------------------|
>>> |   __Total__   | __3 236 859 Occurrences__ |
>>> 
>>> Those 4 operations are the one that I'll support for now.
>>> To support more complex expressions, we would need to JIT-compile
>>> a DWARF expression interpreter.
>> 
>> 
>> First, this all sounds really useful.
>> 
>> Out of curiosity, how do these statistics change if you compile Clang 
>> with -O1? Many of my users need to debug slightly-optimized code.
>> 
>> -Hal
>> 
>> 
>> -- 
>> Hal Finkel
>> Lead, Compiler Technology and Programming Languages
>> Leadership Computing Facility
>> Argonne National Laboratory
>> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev



More information about the lldb-dev mailing list