1*99451b44SJordan Rupprecht #include <thread> 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht #include "lldb/API/LLDB.h" 4*99451b44SJordan Rupprecht #include "lldb/API/SBDebugger.h" 5*99451b44SJordan Rupprecht #include "lldb/API/SBTarget.h" 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprecht using namespace lldb; main(int argc,char ** argv)8*99451b44SJordan Rupprechtint main (int argc, char **argv) 9*99451b44SJordan Rupprecht { 10*99451b44SJordan Rupprecht // We are expecting the program path and a path to an executable to load 11*99451b44SJordan Rupprecht if (argc != 2) 12*99451b44SJordan Rupprecht return 1; 13*99451b44SJordan Rupprecht const char *program_file = argv[1]; 14*99451b44SJordan Rupprecht SBDebugger::Initialize(); 15*99451b44SJordan Rupprecht SBDebugger debugger = SBDebugger::Create(false); 16*99451b44SJordan Rupprecht auto lambda = [&](){ 17*99451b44SJordan Rupprecht SBError error; 18*99451b44SJordan Rupprecht SBTarget target = debugger.CreateTarget(program_file, nullptr, nullptr, 19*99451b44SJordan Rupprecht false, error); 20*99451b44SJordan Rupprecht }; 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht // Create 3 targets at the same time and make sure we don't crash. 23*99451b44SJordan Rupprecht std::thread thread1(lambda); 24*99451b44SJordan Rupprecht std::thread thread2(lambda); 25*99451b44SJordan Rupprecht std::thread thread3(lambda); 26*99451b44SJordan Rupprecht thread1.join(); 27*99451b44SJordan Rupprecht thread2.join(); 28*99451b44SJordan Rupprecht thread3.join(); 29*99451b44SJordan Rupprecht SBDebugger::Terminate(); 30*99451b44SJordan Rupprecht return 0; 31*99451b44SJordan Rupprecht } 32