SBThread.h revision 2c354722318f0fcad087c76f2bc0dc8db9200b4b
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBThread.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 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBThread_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBThread_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1374089e10cfbb4665da128f26d78c2b4006b5f1c6Christopher Friesen#include "lldb/API/SBDefines.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 157884ab842f7f0be6c583eac2904f5763706816bcEli Friedman#include <stdio.h> 167884ab842f7f0be6c583eac2904f5763706816bcEli Friedman 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb { 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBFrame; 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBThread 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham enum 2594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham { 2694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitStackChanged = (1 << 0), 2794a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitThreadSuspended = (1 << 1), 2894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham eBroadcastBitThreadResumed = (1 << 2), 292e2812388b75d3c62c9518cc1a6550ce29325aa6Jim Ingham eBroadcastBitSelectedFrameChanged = (1 << 3), 302e2812388b75d3c62c9518cc1a6550ce29325aa6Jim Ingham eBroadcastBitThreadSelected = (1 << 4) 3194a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham }; 3294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 3394a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static const char * 3494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetBroadcasterClassName (); 3594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (); 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (const lldb::SBThread &thread); 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~SBThread(); 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValid() const; 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4543490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton void 4643490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton Clear (); 4743490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StopReason 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopReason(); 50640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 512ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Get the number of words associated with the stop reason. 522ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// See also GetStopReasonDataAtIndex(). 53640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton size_t 54640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataCount(); 55640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 56640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 572ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Get information associated with a stop reason. 582ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 592ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Breakpoint stop reasons will have data that consists of pairs of 602ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// breakpoint IDs followed by the breakpoint location IDs (they always come 612ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// in pairs). 622ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 632ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Stop Reason Count Data Type 642ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// ======================== ===== ========================================= 652ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonNone 0 662ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonTrace 0 672ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonBreakpoint N duple: {breakpoint id, location id} 68bcbefa8de7877c5d0674d5816cf96db48b103e6fJohnny Chen /// eStopReasonWatchpoint 1 watchpoint id 692ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonSignal 1 unix signal number 702ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonException N exception data 710bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton /// eStopReasonExec 0 722ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// eStopReasonPlanComplete 0 73640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 74640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton uint64_t 75640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataAtIndex(uint32_t idx); 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopDescription (char *dst, size_t dst_len); 791586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham 801586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham SBValue 811586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham GetStopReturnValue (); 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::tid_t 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetThreadID () const; 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIndexID () const; 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetQueueName() const; 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 102f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham StepInto (const char *target_name, lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 103f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham 104f2ca573e8dc034ecc5050a874d8f01ace0703e18Jim Ingham void 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOut (); 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 1081ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton StepOutOfFrame (lldb::SBFrame &frame); 1091ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton 1101ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton void 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInstruction(bool step_over); 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1131ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton SBError 1141ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton StepOverUntil (lldb::SBFrame &frame, 1151ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton lldb::SBFileSpec &file_spec, 1161ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton uint32_t line); 1171ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunToAddress (lldb::addr_t addr); 120a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham 121a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham SBError 122f59388aa57559d7d074613d65b88abacfd699845Jim Ingham ReturnFromFrame (SBFrame &frame, SBValue &return_value); 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 124123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 1252ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// LLDB currently supports process centric debugging which means when any 1262ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// thread in a process stops, all other threads are stopped. The Suspend() 1272ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// call here tells our process to suspend a thread and not let it run when 1282ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// the other threads in a process are allowed to run. So when 1292ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// SBProcess::Continue() is called, any threads that aren't suspended will 1302ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// be allowed to run. If any of the SBThread functions for stepping are 1312ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the 1322ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// thread will now be allowed to run and these funtions will simply return. 1332ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1342ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Eventually we plan to add support for thread centric debugging where 1352ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// each thread is controlled individually and each thread would broadcast 1362ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// its state, but we haven't implemented this yet. 1372ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1382ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Likewise the SBThread::Resume() call will again allow the thread to run 1392ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// when the process is continued. 1402ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// 1412ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// Suspend() and Resume() functions are not currently reference counted, if 1422ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// anyone has the need for them to be reference counted, please let us 1432ded5ed80f3f4c794a2323b68a5da11fad61b6f2Johnny Chen /// know. 144123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 145123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 146123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Suspend(); 147123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 148123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 149123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Resume (); 150123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 151123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 152123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton IsSuspended(); 153123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 1542c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor bool 1552c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor IsStopped(); 1562c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumFrames (); 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBFrame 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameAtIndex (uint32_t idx); 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 163c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 164c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton GetSelectedFrame (); 165c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 166c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 167c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton SetSelectedFrame (uint32_t frame_idx); 16894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 16994a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static bool 17094a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham EventIsThreadEvent (const SBEvent &event); 17194a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 17294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static SBFrame 17394a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetStackFrameFromEvent (const SBEvent &event); 17494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 17594a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham static SBThread 17694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetThreadFromEvent (const SBEvent &event); 177c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBProcess 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcess (); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::SBThread & 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator = (const lldb::SBThread &rhs); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator == (const lldb::SBThread &rhs) const; 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator != (const lldb::SBThread &rhs) const; 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice bool 1917826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice GetDescription (lldb::SBStream &description) const; 19294a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 19394a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham bool 19494a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham GetStatus (lldb::SBStream &status) const; 1957826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpoint; 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpointLocation; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBFrame; 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBProcess; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBDebugger; 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBValue; 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (const lldb::ThreadSP& lldb_object_sp); 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetThread (const lldb::ThreadSP& lldb_object_sp); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20988e3de205708f14431559072ca258899b5ac31ccJim Ingham#ifndef SWIG 21088e3de205708f14431559072ca258899b5ac31ccJim Ingham SBError 21188e3de205708f14431559072ca258899b5ac31ccJim Ingham ResumeNewPlan (lldb_private::ExecutionContext &exe_ctx, lldb_private::ThreadPlan *new_plan); 21288e3de205708f14431559072ca258899b5ac31ccJim Ingham#endif 21388e3de205708f14431559072ca258899b5ac31ccJim Ingham 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 215a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton lldb::ExecutionContextRefSP m_opaque_sp; 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBThread_h_ 221