# Test hook add/list/delete/enable/disable commands. # # RUN: %lldb -b -s %s 2>&1 | FileCheck %s # Adding hooks assigns incrementing IDs. target hook add -L -o "script print('hook1')" # CHECK: Hook #1 added. target hook add -L -o "script print('hook2')" # CHECK: Hook #2 added. target hook add -L -o "script print('hook3')" # CHECK: Hook #3 added. # List all hooks. target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 1 # CHECK: State: enabled # CHECK: Triggers: load # CHECK: Commands: # CHECK: script print('hook1') # CHECK: Hook: 2 # CHECK: State: enabled # CHECK: Triggers: load # CHECK: Commands: # CHECK: script print('hook2') # CHECK: Hook: 3 # CHECK: State: enabled # CHECK: Triggers: load # CHECK: Commands: # CHECK: script print('hook3') # Disable a hook. target hook disable 2 target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 1 # CHECK: State: enabled # CHECK: Hook: 2 # CHECK: State: disabled # CHECK: Hook: 3 # CHECK: State: enabled # Re-enable the hook. target hook enable 2 target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 1 # CHECK: State: enabled # CHECK: Hook: 2 # CHECK: State: enabled # CHECK: Hook: 3 # CHECK: State: enabled # Delete a hook in the middle. target hook delete 2 target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 1 # CHECK-NOT: Hook: 2 # CHECK: Hook: 3 # New hook gets a new ID (not reused). target hook add -L -o "script print('hook4')" # CHECK: Hook #4 added. target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 1 # CHECK-NOT: Hook: 2 # CHECK: Hook: 3 # CHECK: Hook: 4 # Delete all hooks. settings set auto-confirm true target hook delete target hook list # CHECK: (lldb) target hook list # CHECK: No hooks. # Add a hook with --on-load and --on-unload. target hook add -L -u -o "script print('load+unload')" # CHECK: Hook #5 added. target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 5 # CHECK: State: enabled # CHECK: Triggers: load, unload # CHECK: Commands: # CHECK: script print('load+unload') # Add a hook with multiple one-liner commands. target hook add -L -o "script print('first')" -o "script print('second')" # CHECK: Hook #6 added. target hook list # CHECK: Hook: 6 # CHECK: State: enabled # CHECK: Triggers: load # CHECK: Commands: # CHECK: script print('first') # CHECK: script print('second') # Disable all hooks. target hook disable target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 5 # CHECK: State: disabled # CHECK: Hook: 6 # CHECK: State: disabled # Enable all hooks. target hook enable target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 5 # CHECK: State: enabled # CHECK: Hook: 6 # CHECK: State: enabled # Add a hook with --on-stop only. target hook delete target hook add -S -o "bt" # CHECK: Hook #7 added. target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 7 # CHECK: State: enabled # CHECK: Triggers: stop # CHECK: Commands: # CHECK: bt # Add a hook with all triggers. target hook add -L -u -S -o "script print('all events')" # CHECK: Hook #8 added. target hook list # CHECK: Hook: 8 # CHECK: State: enabled # CHECK: Triggers: load, unload, stop # Add a hook with --on-stop and inline filter. target hook delete target hook add -S -s mylib.so -o "bt" # CHECK: Hook #9 added. target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 9 # CHECK: State: enabled # CHECK: Triggers: stop # CHECK: Commands: # CHECK: bt # CHECK: Specifier: # CHECK: Module: mylib.so # Per-trigger disable: remove stop from hook #9 using modify. target hook modify --disable-trigger stop 9 target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 9 # CHECK: State: enabled # CHECK-NOT: Triggers: stop # CHECK: Commands: # Per-trigger enable: re-add stop to hook #9 using modify. target hook modify --enable-trigger stop 9 target hook list # CHECK: (lldb) target hook list # CHECK: Hook: 9 # CHECK: State: enabled # CHECK: Triggers: stop