diff --git a/lldb/tools/lldb-vscode/lldb-vscode.cpp b/lldb/tools/lldb-vscode/lldb-vscode.cpp --- a/lldb/tools/lldb-vscode/lldb-vscode.cpp +++ b/lldb/tools/lldb-vscode/lldb-vscode.cpp @@ -1200,11 +1200,13 @@ // executable when attaching to a process by process ID in a "attach" // request. FILE *out = llvm::sys::RetryAfterSignal(nullptr, fopen, dev_null_path, "w"); - if (out) { - // Set the output and error file handles to redirect into nothing otherwise + if (out && !g_vsc.input.descriptor.m_is_socket) { + // If the input and output descriptors are STDIN and STDOUT then we need to + // set the output and error file handles to redirect into nothing otherwise // if any code in LLDB prints to the debugger file handles, the output and // error file handles are initialized to STDOUT and STDERR and any output - // will kill our debug session. + // will kill our debug session. However, if the communication is via sockets + // then we can leave these open. g_vsc.debugger.SetOutputFileHandle(out, true); g_vsc.debugger.SetErrorFileHandle(out, false); }