def main(): arguments = parse_args() lldb_python_path = getattr(arguments, 'lldb_python_path', None) if lldb_python_path is not None: set_custom_lldb_path(os.path.expanduser(lldb_python_path)) lldb = get_lldb() debugger = lldb.SBDebugger.Create() is_attach = (getattr(arguments, 'executable_path', None) == None) is_interactive = getattr(arguments, 'interactive', False) ipc_channel = IpcChannel(is_interactive) start_debugging(debugger, arguments, ipc_channel, is_attach) register_signal_handler(debugger) chrome_channel = ChromeChannel() debugger_store = DebuggerStore( debugger, chrome_channel, ipc_channel, is_attach, str(getattr(arguments, 'basepath', '.'))) try: app = ChromeDevToolsDebuggerApp(debugger_store, getattr(arguments, 'port', 0)) # Tell IDE server is ready. log_debug('Port: %s' % app.debug_server.server_port) event_thread = LLDBListenerThread(debugger_store, app) event_thread.start() if is_interactive: app.start_nonblocking() interactive_loop(debugger) else: app.start_blocking() except KeyboardInterrupt: # Force app to exit on Ctrl-C. os._exit(1) event_thread.join() lldb.SBDebugger.Destroy(debugger) lldb.SBDebugger.Terminate() # TODO: investigate why we need os._exit() to terminate python process. os._exit(0)