[lldb] Disable variable watchpoints when going out of scope
authorMed Ismail Bennani <ismail@bennani.ma>
Thu, 25 May 2023 22:06:44 +0000 (15:06 -0700)
committerMed Ismail Bennani <ismail@bennani.ma>
Thu, 25 May 2023 22:07:09 +0000 (15:07 -0700)
commit7c847ac4bd1bd8a89c7fbb4581328fa8cb0498f1
tree2a68065be94e84d57b2b03b277f0a47e1b81cf7b
parent330a232ae76139c3970df5ccaf1b51640cbd4d66
[lldb] Disable variable watchpoints when going out of scope

If we use a variable watchpoint with a condition using a scope variable,
if we go out-of-scope, the watpoint remains active which can the
expression evaluator to fail to parse the watchpoint condition (because
of the missing varible bindings).

This was discovered after `watchpoint_callback.test` started failing on
the green dragon bot.

This patch should address that issue by setting an internal breakpoint
on the return addresss of the current frame when creating a variable
watchpoint. The breakpoint has a callback that will disable the watchpoint
if the the breakpoint execution context matches the watchpoint execution
context.

This is only enabled for local variables.

This patch also re-enables the failing test following e1086384e584.

rdar://109574319

Differential Revision: https://reviews.llvm.org/D151366

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
lldb/include/lldb/Breakpoint/Watchpoint.h
lldb/source/Breakpoint/Watchpoint.cpp
lldb/source/Commands/CommandObjectWatchpoint.cpp
lldb/test/Shell/ScriptInterpreter/Lua/watchpoint_callback.test
lldb/test/Shell/Watchpoint/Inputs/val.c [new file with mode: 0644]
lldb/test/Shell/Watchpoint/Inputs/watchpoint.in [new file with mode: 0644]
lldb/test/Shell/Watchpoint/LocalVariableWatchpointDisabler.test [new file with mode: 0644]