Add opencombine_lldb.py for better Demand formatting in lldb/Xcode (#146)
This commit is contained in:
@@ -89,3 +89,16 @@ GYB template files have the `.gyb` extension. Run `make gyb` to generate Swift c
|
||||
templates. The generated files are prefixed with `GENERATED-` and are checked into source control. Those
|
||||
files should never be edited directly. Instead, the `.gyb` template should be edited, and after that the files
|
||||
should be regenerated using `make gyb`.
|
||||
|
||||
#### Debugger Support
|
||||
|
||||
The file `opencombine_lldb.py` defines some `lldb` type summaries for easier debugging. These type summaries improve the way `lldb` and Xcode display some OpenCombine values.
|
||||
|
||||
To use `opencombine_lldb.py`, figure out its full path. Let's say the full path is `~/projects/OpenCombine/opencombine_lldb.py`. Then the following statement to your `~/.lldbinit` file:
|
||||
|
||||
command script import ~/projects/OpenCombine/opencombine_lldb.py
|
||||
|
||||
Currently, `opencombine_lldb.py` defines type summaries for these types:
|
||||
|
||||
- `Subscribers.Demand`
|
||||
- That's all for now.
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# To use `opencombine_lldb.py`, figure out its full path.
|
||||
# Let's say the full path is `~/projects/OpenCombine/opencombine_lldb.py`.
|
||||
# Then add the following statement to your `~/.lldbinit` file:
|
||||
#
|
||||
# command script import ~/projects/OpenCombine/opencombine_lldb.py
|
||||
|
||||
import lldb
|
||||
|
||||
# Show a Demand as either `max(N)` or `unlimited`.
|
||||
def summary_Demand(sb_value, internal_dict):
|
||||
child = sb_value.GetChildAtIndex(0)
|
||||
if not child.IsValid():
|
||||
return 'failed to get child of Demand'
|
||||
number = child.GetValueAsUnsigned()
|
||||
|
||||
# .unlimited is represented by a rawValue of UInt(Int.max) + 1.
|
||||
# Int.max is either 2**31 - 1 or 2**63 - 1 depending on the
|
||||
# target platform. So .unlimited is either 2**31 or 2**63.
|
||||
# 31 = 4 * 8 - 1
|
||||
# 63 = 8 * 8 - 1
|
||||
unlimited = 2**(child.GetByteSize() * 8 - 1)
|
||||
|
||||
if number == unlimited:
|
||||
return 'unlimited'
|
||||
else:
|
||||
return 'max(%d)' % number
|
||||
|
||||
def __lldb_init_module(debugger, internal_dict):
|
||||
debugger.HandleCommand('type summary add -w swift OpenCombine.Subscribers.Demand -F "' + __name__ + '.summary_Demand"')
|
||||
Reference in New Issue
Block a user