JDevlieghere created this revision. JDevlieghere added reviewers: jingham, mib, delcypher. Herald added a project: All. JDevlieghere requested review of this revision.
When setting a variable watchpoint, the watchpoint stores the variable name in the watchpoint spec. For expression variables we should store the expression in the watchpoint spec. This patch adds that functionality. https://reviews.llvm.org/D146262 Files: lldb/source/Commands/CommandObjectWatchpoint.cpp lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py Index: lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py =================================================================== --- lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py +++ lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py @@ -46,7 +46,7 @@ self.setTearDownCleanup() exe = self.getBuildArtifact("a.out") - self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + target = self.dbg.CreateTarget(exe) # Add a breakpoint to set a watchpoint when stopped on the breakpoint. lldbutil.run_break_set_by_file_and_line( @@ -81,6 +81,12 @@ self.expect("watchpoint list -v", substrs=['hit_count = 0']) + # Check the underlying SBWatchpoint. + watchpoint = target.GetWatchpointAtIndex(0) + self.assertEqual(watchpoint.GetWatchSize(), 1) + self.assertEqual(watchpoint.GetHitCount(), 0) + self.assertEqual(watchpoint.GetWatchSpec(), "g_char_ptr + 7") + self.runCmd("process continue") # We should be stopped again due to the watchpoint (write type), but Index: lldb/source/Commands/CommandObjectWatchpoint.cpp =================================================================== --- lldb/source/Commands/CommandObjectWatchpoint.cpp +++ lldb/source/Commands/CommandObjectWatchpoint.cpp @@ -949,9 +949,8 @@ uint32_t watch_type = m_option_watchpoint.watch_type; error.Clear(); - Watchpoint *wp = - target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error) - .get(); + WatchpointSP wp = + target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error); if (wp) { wp->SetWatchSpec(command.GetArgumentAtIndex(0)); wp->SetWatchVariable(true); @@ -1117,10 +1116,10 @@ CompilerType compiler_type(valobj_sp->GetCompilerType()); Status error; - Watchpoint *wp = - target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error) - .get(); + WatchpointSP wp = + target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error); if (wp) { + wp->SetWatchSpec(std::string(expr)); Stream &output_stream = result.GetOutputStream(); output_stream.Printf("Watchpoint created: "); wp->GetDescription(&output_stream, lldb::eDescriptionLevelFull);
Index: lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py =================================================================== --- lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py +++ lldb/test/API/commands/watchpoints/watchpoint_set_command/TestWatchLocationWithWatchSet.py @@ -46,7 +46,7 @@ self.setTearDownCleanup() exe = self.getBuildArtifact("a.out") - self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + target = self.dbg.CreateTarget(exe) # Add a breakpoint to set a watchpoint when stopped on the breakpoint. lldbutil.run_break_set_by_file_and_line( @@ -81,6 +81,12 @@ self.expect("watchpoint list -v", substrs=['hit_count = 0']) + # Check the underlying SBWatchpoint. + watchpoint = target.GetWatchpointAtIndex(0) + self.assertEqual(watchpoint.GetWatchSize(), 1) + self.assertEqual(watchpoint.GetHitCount(), 0) + self.assertEqual(watchpoint.GetWatchSpec(), "g_char_ptr + 7") + self.runCmd("process continue") # We should be stopped again due to the watchpoint (write type), but Index: lldb/source/Commands/CommandObjectWatchpoint.cpp =================================================================== --- lldb/source/Commands/CommandObjectWatchpoint.cpp +++ lldb/source/Commands/CommandObjectWatchpoint.cpp @@ -949,9 +949,8 @@ uint32_t watch_type = m_option_watchpoint.watch_type; error.Clear(); - Watchpoint *wp = - target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error) - .get(); + WatchpointSP wp = + target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error); if (wp) { wp->SetWatchSpec(command.GetArgumentAtIndex(0)); wp->SetWatchVariable(true); @@ -1117,10 +1116,10 @@ CompilerType compiler_type(valobj_sp->GetCompilerType()); Status error; - Watchpoint *wp = - target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error) - .get(); + WatchpointSP wp = + target->CreateWatchpoint(addr, size, &compiler_type, watch_type, error); if (wp) { + wp->SetWatchSpec(std::string(expr)); Stream &output_stream = result.GetOutputStream(); output_stream.Printf("Watchpoint created: "); wp->GetDescription(&output_stream, lldb::eDescriptionLevelFull);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits