SBThread.h revision 123db408a6bc06614ec893040aaad84d8d0d16f9
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: 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (); 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (const lldb::SBThread &thread); 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~SBThread(); 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValid() const; 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3343490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton void 3443490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton Clear (); 3543490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::StopReason 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopReason(); 38640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 39640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Get the number of words associated with the stop reason. 40640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton size_t 41640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataCount(); 42640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 43640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 44640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Get information associated with a stop reason. 45640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // 46640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Breakpoint stop reasons will have data that consists of pairs of 47640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // breakpoint IDs followed by the breakpoint location IDs (they always come 48640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // in pairs). 49640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // 50640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Stop Reason Count Data Type 51640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // ======================== ===== ========================================== 52640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonNone 0 53640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonTrace 0 54640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonBreakpoint N duple: {breakpoint id, location id} 55640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonWatchpoint N duple: {watchpoint id, location id} 56640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonSignal 1 unix signal number 57640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonException N exception data 58640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // eStopReasonPlanComplete 0 59640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton //-------------------------------------------------------------------------- 60640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton uint64_t 61640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton GetStopReasonDataAtIndex(uint32_t idx); 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetStopDescription (char *dst, size_t dst_len); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::tid_t 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetThreadID () const; 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIndexID () const; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const; 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetQueueName() const; 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping); 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepOut (); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StepInstruction(bool step_over); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RunToAddress (lldb::addr_t addr); 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 93123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 94123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // LLDB currently supports process centric debugging which means when any 95123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // thread in a process stops, all other threads are stopped. The Suspend() 96123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // call here tells our process to suspend a thread and not let it run when 97123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // the other threads in a process are allowed to run. So when 98123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // SBProcess::Continue() is called, any threads that aren't suspended will 99123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // be allowed to run. If any of the SBThread functions for stepping are 100123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the 101123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // thread will now be allowed to run and these funtions will simply return. 102123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // 103123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // Eventually we plan to add support for thread centric debugging where each 104123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // thread is controlled individually and each thread would broadcast its 105123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // state, but we haven't implemented this yet. 106123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // 107123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // Likewise the SBThread::Resume() call will again allow the thread to run 108123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // when the process is continued. 109123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // 110123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // The Suspend() and Resume() functions are not currently reference counted, 111123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // if anyone has the need for them to be reference counted, please let us 112123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton // know. 113123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton //-------------------------------------------------------------------------- 114123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 115123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Suspend(); 116123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 117123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 118123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton Resume (); 119123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 120123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton bool 121123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton IsSuspended(); 122123db408a6bc06614ec893040aaad84d8d0d16f9Greg Clayton 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumFrames (); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBFrame 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFrameAtIndex (uint32_t idx); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 129c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 130c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton GetSelectedFrame (); 131c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 132c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton lldb::SBFrame 133c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton SetSelectedFrame (uint32_t frame_idx); 134c5157ecb9c6185b92923fab50de53f3fad86095dGreg Clayton 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SBProcess 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetProcess (); 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::SBThread & 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator = (const lldb::SBThread &rhs); 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator == (const lldb::SBThread &rhs) const; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator != (const lldb::SBThread &rhs) const; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice bool 1527826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice GetDescription (lldb::SBStream &description) const; 1537826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpoint; 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBBreakpointLocation; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBFrame; 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBProcess; 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBDebugger; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner friend class SBValue; 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 165a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton lldb_private::Thread * 166a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton get (); 167a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::Thread * 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator->() const; 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb_private::Thread & 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator*() const; 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Thread * 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator->(); 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb_private::Thread & 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator*(); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SBThread (const lldb::ThreadSP& lldb_object_sp); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetThread (const lldb::ThreadSP& lldb_object_sp); 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from Thread can see and modify these 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19363094e0bb161580564954dee512955c1c79d3476Greg Clayton lldb::ThreadSP m_opaque_sp; 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBThread_h_ 199