
/// LLDB C API Test Driver

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#if !defined(_MSC_VER)
#include <signal.h>
#endif

#include "lldb/API/SBDebugger.h"

#include "common.h"

using namespace std;
using namespace lldb;

void test(SBDebugger &dbg, std::vector<string> args);

int main(int argc, char **argv) {

// Ignore SIGPIPE.  The lldb driver does this as well,
// because we seem to get spurious SIGPIPES on some
// Unixen that take the driver down.
#if !defined(_MSC_VER)
  signal(SIGPIPE, SIG_IGN);
#endif
  int code = 0;

  SBDebugger::Initialize();
  SBDebugger dbg = SBDebugger::Create();
  dbg.HandleCommand("settings set symbols.enable-external-lookup false");
  dbg.HandleCommand("settings set plugin.process.gdb-remote.packet-timeout 60");

  try {
    if (!dbg.IsValid())
      throw Exception("invalid debugger");
    vector<string> args(argv + 1, argv + argc);

    test(dbg, args);
  } catch (Exception &e) {
    cout << "ERROR: " << e.what() << endl;
    code = 1;
  }

  SBDebugger::Destroy(dbg);
  SBDebugger::Terminate();
  return code;
}
