summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmDebuggerWindowsPipeConnection.cxx17
-rw-r--r--Source/cmDebuggerWindowsPipeConnection.h2
2 files changed, 18 insertions, 1 deletions
diff --git a/Source/cmDebuggerWindowsPipeConnection.cxx b/Source/cmDebuggerWindowsPipeConnection.cxx
index 1c6a2a7..5f6f848 100644
--- a/Source/cmDebuggerWindowsPipeConnection.cxx
+++ b/Source/cmDebuggerWindowsPipeConnection.cxx
@@ -221,13 +221,28 @@ void cmDebuggerPipeClient_WIN32::WaitForConnection()
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
auto err = GetLastError();
- throw std::runtime_error("CreateFile failed with " + err);
+ throw std::runtime_error(std::string("CreateFile failed for pipe ") +
+ GetErrorMessage(err));
}
pipes = std::make_unique<DuplexPipe_WIN32>(hPipe);
}
}
+std::string cmDebuggerPipeClient_WIN32::GetErrorMessage(DWORD errorCode)
+{
+ LPSTR message = nullptr;
+ DWORD size = FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPSTR)&message, 0, nullptr);
+ std::string errorMessage =
+ this->PipeName + ": " + std::string(message, size);
+ LocalFree(message);
+ return errorMessage;
+}
+
bool cmDebuggerPipeClient_WIN32::isOpen()
{
return pipes != nullptr;
diff --git a/Source/cmDebuggerWindowsPipeConnection.h b/Source/cmDebuggerWindowsPipeConnection.h
index 88ed1de..6a57435 100644
--- a/Source/cmDebuggerWindowsPipeConnection.h
+++ b/Source/cmDebuggerWindowsPipeConnection.h
@@ -90,6 +90,8 @@ public:
bool write(void const* buffer, size_t n) override;
private:
+ std::string GetErrorMessage(DWORD errorCode);
+
std::string const PipeName;
std::unique_ptr<DuplexPipe_WIN32> pipes;
};