1d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 2d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// LLDB C++ API Test: verify the event description as obtained by calling 3d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// SBEvent::GetCStringFromEvent that is received by an 4d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// SBListener object registered with a process with a breakpoint. 5d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 6d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include <atomic> 7d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include <iostream> 8d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include <string> 9d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include <thread> 10d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 11d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb-headers.h" 12d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 13d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "common.h" 14d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 15d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleausing namespace lldb; 16d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleausing namespace std; 17d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 18d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// listener thread control 19d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaextern atomic<bool> g_done; 20d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 21d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// used by listener thread to communicate a successful process continue command 22d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// back to the checking thread. 23d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 24d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleamultithreaded_queue<bool> g_process_started; 25d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 26d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaextern SBListener g_listener; 27d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 28d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleavoid listener_func() { 29d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea while (!g_done) { 30d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea SBEvent event; 31d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea bool got_event = g_listener.WaitForEvent(1, event); 32d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if (got_event) { 33d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if (!event.IsValid()) 34d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea throw Exception("event is not valid in listener thread"); 35d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 36d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea SBProcess process = SBProcess::GetProcessFromEvent(event); 37d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if (process.GetState() == eStateStopped) { 38d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea SBError error = process.Continue(); 39d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea if (!error.Success()) 40d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea throw Exception(string("Cannot continue process from listener thread: ") 41d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea + error.GetCString()); 42d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea g_process_started.push(true); 43d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea } 44d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea } 45d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea } 46d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea} 47d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea 48d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleavoid check_listener(SBDebugger &dbg) { 49d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea bool got_message = false; 50d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea while (!got_message) 51d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea g_process_started.pop(5, got_message); 52d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea g_done = true; 53d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea} 54