
/// 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 600");

  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;
}
