1 2// LLDB C++ API Test: verify that the function registered with 3// SBBreakpoint.SetCallback() is invoked when a breakpoint is hit. 4 5#include <mutex> 6#include <iostream> 7#include <vector> 8#include <string> 9 10%include_SB_APIs% 11 12#include "common.h" 13 14using namespace std; 15using namespace lldb; 16 17mutex g_mutex; 18condition_variable g_condition; 19int g_breakpoint_hit_count = 0; 20 21bool BPCallback (void *baton, 22 SBProcess &process, 23 SBThread &thread, 24 SBBreakpointLocation &location) { 25 lock_guard<mutex> lock(g_mutex); 26 g_breakpoint_hit_count += 1; 27 g_condition.notify_all(); 28 return true; 29} 30 31void test(SBDebugger &dbg, vector<string> args) { 32 dbg.SetAsync(false); 33 SBTarget target = dbg.CreateTarget(args.at(0).c_str()); 34 if (!target.IsValid()) throw Exception("invalid target"); 35 36 SBBreakpoint breakpoint = target.BreakpointCreateByName("next"); 37 if (!breakpoint.IsValid()) throw Exception("invalid breakpoint"); 38 breakpoint.SetCallback(BPCallback, 0); 39 40 std::unique_ptr<char> working_dir(get_working_dir()); 41 SBProcess process = target.LaunchSimple (0, 0, working_dir.get()); 42 43 { 44 unique_lock<mutex> lock(g_mutex); 45 g_condition.wait_for(lock, chrono::seconds(5)); 46 if (g_breakpoint_hit_count != 1) 47 throw Exception("Breakpoint hit count expected to be 1"); 48 } 49} 50