1ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen//===-- Watchpoint.h --------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen#ifndef liblldb_Watchpoint_h_ 11ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen#define liblldb_Watchpoint_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 1710b12b3aa8542721fa9485c1d520433de0e0e720Johnny Chen#include <string> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 23096c293f8d4171448908801d5a1a74b152af1430Johnny Chen#include "lldb/Target/Target.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h" 25f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen#include "lldb/Breakpoint/WatchpointOptions.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/StoppointLocation.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chenclass Watchpoint : 31102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<Watchpoint>, 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public StoppointLocation 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 369c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham class WatchpointEventData : 379c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham public EventData 389c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham { 399c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham public: 409c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 419c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham static const ConstString & 429c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetFlavorString (); 439c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 449c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham virtual const ConstString & 459c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetFlavor () const; 469c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 479c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham WatchpointEventData (lldb::WatchpointEventType sub_type, 489c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham const lldb::WatchpointSP &new_watchpoint_sp); 499c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 509c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham virtual 519c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham ~WatchpointEventData(); 529c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 539c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham lldb::WatchpointEventType 549c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetWatchpointEventType () const; 559c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 569c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham lldb::WatchpointSP & 579c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetWatchpoint (); 589c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 599c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham virtual void 609c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham Dump (Stream *s) const; 619c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 629c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham static lldb::WatchpointEventType 639c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetWatchpointEventTypeFromEvent (const lldb::EventSP &event_sp); 649c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 659c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham static lldb::WatchpointSP 669c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetWatchpointFromEvent (const lldb::EventSP &event_sp); 679c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 689c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham static const WatchpointEventData * 699c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham GetEventDataFromEvent (const Event *event_sp); 709c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 719c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham private: 729c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 739c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham lldb::WatchpointEventType m_watchpoint_event; 749c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham lldb::WatchpointSP m_new_watchpoint_sp; 759c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 769c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham DISALLOW_COPY_AND_ASSIGN (WatchpointEventData); 779c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham }; 789c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 7936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton Watchpoint (Target& target, lldb::addr_t addr, uint32_t size, const ClangASTType *type, bool hardware = true); 80ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen ~Watchpoint (); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 820b09366e83f256920bb55ec7488cb58dfa85ab6bJohnny Chen void 830b09366e83f256920bb55ec7488cb58dfa85ab6bJohnny Chen IncrementFalseAlarmsAndReviseHitCount(); 840b09366e83f256920bb55ec7488cb58dfa85ab6bJohnny Chen 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsEnabled () const; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 899c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham SetEnabled (bool enabled, bool notify = true); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 91043f8c230739ceab194257a617731ecd28e1a912Johnny Chen virtual bool 9201acfa76010b8db2e77016c144963c4dd70f1392Johnny Chen IsHardware () const; 9301acfa76010b8db2e77016c144963c4dd70f1392Johnny Chen 9401acfa76010b8db2e77016c144963c4dd70f1392Johnny Chen virtual bool 95043f8c230739ceab194257a617731ecd28e1a912Johnny Chen ShouldStop (StoppointCallbackContext *context); 96043f8c230739ceab194257a617731ecd28e1a912Johnny Chen 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool WatchpointRead () const; 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool WatchpointWrite () const; 9954e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton uint32_t GetIgnoreCount () const; 10054e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton void SetIgnoreCount (uint32_t n); 1019c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham void SetWatchpointType (uint32_t type, bool notify = true); 1029e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen void SetDeclInfo (const std::string &str); 1039e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen std::string GetWatchSpec(); 1049e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen void SetWatchSpec (const std::string &str); 1059e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen 1069e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen // Snapshot management interface. 1079e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen bool IsWatchVariable() const; 1089e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen void SetWatchVariable(bool val); 1099e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham bool CaptureWatchedValue (const ExecutionContext &exe_ctx); 1109e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen 11134bbf85e60949752de9c8272a70d59383e523cc5Johnny Chen void GetDescription (Stream *s, lldb::DescriptionLevel level); 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void Dump (Stream *s) const; 113c9c2a9b1c36e54220369c37cd8d859ed423d5b59Johnny Chen void DumpSnapshots (Stream *s, const char * prefix = NULL) const; 11410b12b3aa8542721fa9485c1d520433de0e0e720Johnny Chen void DumpWithLevel (Stream *s, lldb::DescriptionLevel description_level) const; 1159e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham Target &GetTarget() { return m_target; } 11641a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen const Error &GetError() { return m_error; } 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 118712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 119f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// Returns the WatchpointOptions structure set for this watchpoint. 120f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// 121f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// @return 122f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// A pointer to this watchpoint's WatchpointOptions. 123f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen //------------------------------------------------------------------ 124f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen WatchpointOptions * 125f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen GetOptions () { return &m_options; } 126f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen 127f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen //------------------------------------------------------------------ 128f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// Set the callback action invoked when the watchpoint is hit. 129f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// 130f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// @param[in] callback 131f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// The method that will get called when the watchpoint is hit. 132f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// @param[in] callback_baton 133f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// A void * pointer that will get passed back to the callback function. 134f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// @param[in] is_synchronous 135f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// If \b true the callback will be run on the private event thread 136f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// before the stop event gets reported. If false, the callback will get 137f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// handled on the public event thead after the stop has been posted. 138f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// 139f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// @return 140f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// \b true if the process should stop when you hit the watchpoint. 141f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// \b false if it should continue. 142f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen //------------------------------------------------------------------ 143f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen void 144f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen SetCallback (WatchpointHitCallback callback, 145f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen void *callback_baton, 146f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen bool is_synchronous = false); 147f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen 148f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen void 149f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen SetCallback (WatchpointHitCallback callback, 150f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen const lldb::BatonSP &callback_baton_sp, 151f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen bool is_synchronous = false); 152f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen 153f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen void ClearCallback(); 154f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen 155f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen //------------------------------------------------------------------ 156712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// Invoke the callback action when the watchpoint is hit. 157712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// 158712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// @param[in] context 159712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// Described the watchpoint event. 160712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// 161712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// @return 162712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// \b true if the target should stop at this watchpoint and \b false not. 163712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 164712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen bool 165712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen InvokeCallback (StoppointCallbackContext *context); 166712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen 167712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 168712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen // Condition 169712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 170712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 171f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// Set the watchpoint's condition. 172712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// 173712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// @param[in] condition 174f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen /// The condition expression to evaluate when the watchpoint is hit. 175712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// Pass in NULL to clear the condition. 176712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 177712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen void SetCondition (const char *condition); 178712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen 179712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 180712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// Return a pointer to the text of the condition expression. 181712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// 182712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// @return 183712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen /// A pointer to the condition expression text, or NULL if no 184712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen // condition has been set. 185712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen //------------------------------------------------------------------ 186712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen const char *GetConditionText () const; 187712a628dde2f4f786389feecf7e06e59f0853c75Johnny Chen 188f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen void 189f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen TurnOnEphemeralMode(); 190f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen 191f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen void 192f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen TurnOffEphemeralMode(); 193f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen 194258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen bool 195258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen IsDisabledDuringEphemeralMode(); 1969e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham 1979e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham const ClangASTType & 1989e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham GetClangASTType() 1999e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham { 2009e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham return m_type; 2019e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham } 2029e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham 203258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 205096c293f8d4171448908801d5a1a74b152af1430Johnny Chen friend class Target; 206116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen friend class WatchpointList; 207096c293f8d4171448908801d5a1a74b152af1430Johnny Chen 208116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen void ResetHitCount() { m_hit_count = 0; } 209096c293f8d4171448908801d5a1a74b152af1430Johnny Chen 2109e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham Target &m_target; 21141a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen bool m_enabled; // Is this watchpoint enabled 21241a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen bool m_is_hardware; // Is this a hardware watchpoint 2139e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen bool m_is_watch_variable; // True if set via 'watchpoint set variable'. 214f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen bool m_is_ephemeral; // True if the watchpoint is in the ephemeral mode, meaning that it is 215f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen // undergoing a pair of temporary disable/enable actions to avoid recursively 216f84e566ff66dceb58674494b26408d3c83921ab9Johnny Chen // triggering further watchpoint events. 217258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen uint32_t m_disabled_count; // Keep track of the count that the watchpoint is disabled while in ephemeral mode. 218258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen // At the end of the ephemeral mode when the watchpoint is to be enabled agian, 219258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen // we check the count, if it is more than 1, it means the user-supplied actions 220258db3ab3d02fc013f8674f3c20007c1e86b503dJohnny Chen // actually want the watchpoint to be disabled! 22141a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen uint32_t m_watch_read:1, // 1 if we stop when the watched data is read from 22241a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen m_watch_write:1, // 1 if we stop when the watched data is written to 22341a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen m_watch_was_read:1, // Set to 1 when watchpoint is hit for a read access 22441a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen m_watch_was_written:1; // Set to 1 when watchpoint is hit for a write access 2250b09366e83f256920bb55ec7488cb58dfa85ab6bJohnny Chen uint32_t m_ignore_count; // Number of times to ignore this watchpoint 2260b09366e83f256920bb55ec7488cb58dfa85ab6bJohnny Chen uint32_t m_false_alarms; // Number of false alarms. 22741a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen std::string m_decl_str; // Declaration information, if any. 2289e98559420d8c7c248b0c75b48db65ffd878402bJohnny Chen std::string m_watch_spec_str; // Spec for the watchpoint. 2299e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham lldb::ValueObjectSP m_old_value_sp; 2309e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham lldb::ValueObjectSP m_new_value_sp; 2319e376625d6354d77cd6240007f0d42034dd3f1eeJim Ingham ClangASTType m_type; 23207fb7b2f3eca0262ba0824cfb93c0a7e20d911fdJohnny Chen Error m_error; // An error object describing errors associated with this watchpoint. 233f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen WatchpointOptions m_options; // Settable watchpoint options, which is a delegate to handle 234f3ec4617297810223deb545cb68214ca4dd8009cJohnny Chen // the callback machinery. 2359c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham bool m_being_created; 23641a55efdfd779b910fb3515c47357c97e695ec22Johnny Chen 237102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<ClangUserExpression> m_condition_ap; // The condition to test. 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 239116a5cd7b8a0ec7929f10281cd708edb2bf20ffaJohnny Chen void SetID(lldb::watch_id_t id) { m_loc_id = id; } 2409c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 2419c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham void 2429c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham SendWatchpointChangedEvent (lldb::WatchpointEventType eventKind); 2439c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham 2449c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham void 2459c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham SendWatchpointChangedEvent (WatchpointEventData *data); 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 247ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen DISALLOW_COPY_AND_ASSIGN (Watchpoint); 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 252ecd4feb5111432d2878e95461220c720cb2d24c8Johnny Chen#endif // liblldb_Watchpoint_h_ 253