Bläddra i källkod

Merge topic 'fix-win-dbg-msg'

cd46ecad19 Debugger: Fix pipe connection error message construction on Windows

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !8785
Brad King 2 år sedan
förälder
incheckning
b1cb23a011
2 ändrade filer med 18 tillägg och 1 borttagningar
  1. 16 1
      Source/cmDebuggerWindowsPipeConnection.cxx
  2. 2 0
      Source/cmDebuggerWindowsPipeConnection.h

+ 16 - 1
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;

+ 2 - 0
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;
 };