|  | #include <thread> | 
|  |  | 
|  | #include "lldb/API/LLDB.h" | 
|  | #include "lldb/API/SBDebugger.h" | 
|  | #include "lldb/API/SBTarget.h" | 
|  |  | 
|  | using namespace lldb; | 
|  | int main (int argc, char **argv) | 
|  | { | 
|  | // We are expecting the program path and a path to an executable to load | 
|  | if (argc != 2) | 
|  | return 1; | 
|  | const char *program_file = argv[1]; | 
|  | SBDebugger::Initialize(); | 
|  | SBDebugger debugger = SBDebugger::Create(false); | 
|  | auto lambda = [&](){ | 
|  | SBError error; | 
|  | SBTarget target = debugger.CreateTarget(program_file, nullptr, nullptr, | 
|  | false, error); | 
|  | }; | 
|  |  | 
|  | // Create 3 targets at the same time and make sure we don't crash. | 
|  | std::thread thread1(lambda); | 
|  | std::thread thread2(lambda); | 
|  | std::thread thread3(lambda); | 
|  | thread1.join(); | 
|  | thread2.join(); | 
|  | thread3.join(); | 
|  | SBDebugger::Terminate(); | 
|  | return 0; | 
|  | } |