brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 0b0dc56 Raw
53 lines · plain
1 2// LLDB C++ API Test: verify that the function registered with3// 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 39  if(breakpoint.GetNumLocations() != 1) throw Exception("unexpected amount of breakpoint locations");40  SBBreakpointLocation breakpoint_location = breakpoint.GetLocationAtIndex(0);41  breakpoint_location.SetCallback(BPCallback, 0);42 43  std::unique_ptr<char> working_dir(get_working_dir());44  SBProcess process = target.LaunchSimple (0, 0, working_dir.get());45 46  {47    unique_lock<mutex> lock(g_mutex);48    g_condition.wait_for(lock, chrono::seconds(5));49    if (g_breakpoint_hit_count != 1)50      throw Exception("Breakpoint hit count expected to be 1");51  }52}53