# REQUIRES: python, system-windows # RUN: %python %s lldb-dap > %t.out 2>&1 # RUN: FileCheck %s --check-prefix=ERROR --allow-empty < %t.out # ERROR-NOT: DAP session error: # Test that we can successfully start the dap server from the console on Windows. import sys import subprocess import os lldb_dap_path = sys.argv[1] if lldb_dap_path.startswith('%'): lldb_dap_path = lldb_dap_path[1:] lldb_dap_path = os.path.normpath(lldb_dap_path) import ctypes from ctypes import wintypes import msvcrt GENERIC_READ = 0x80000000 GENERIC_WRITE = 0x40000000 OPEN_EXISTING = 3 FILE_SHARE_READ = 0x00000001 FILE_SHARE_WRITE = 0x00000002 kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) conin_handle = kernel32.CreateFileW( "CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, None, OPEN_EXISTING, 0, None ) if conin_handle == -1: print("Failed to open CONIN$", file=sys.stderr) sys.exit(1) conin_fd = msvcrt.open_osfhandle(conin_handle, os.O_RDONLY) proc = subprocess.Popen( [lldb_dap_path], stdin=conin_fd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) os.close(conin_fd) try: output, _ = proc.communicate(timeout=2) except subprocess.TimeoutExpired: proc.kill() output, _ = proc.communicate() sys.stdout.buffer.write(output) sys.stdout.flush()