Support debug connecting to a remote port (#3813)
authorThays Grazia <thaystg@gmail.com>
Wed, 12 Apr 2023 21:37:05 +0000 (18:37 -0300)
committerGitHub <noreply@github.com>
Wed, 12 Apr 2023 21:37:05 +0000 (14:37 -0700)
* support for connect to remote port

* Fix compilation
Add \n in the last line of dbgshim.h
Remove sleep to attach debugger.
Add exports.

src/dbgshim/dbgshim.cpp
src/dbgshim/dbgshim.h
src/dbgshim/dbgshim.ntdef
src/dbgshim/dbgshim_unixexports.src

index 5b9ac973f396fa095286d3a3a7139d6b0e29b742..a68d1ad650b67601c3e9ad1d443e2481147c77bb 100644 (file)
@@ -157,6 +157,11 @@ typedef HRESULT (STDAPICALLTYPE *FPCoreCLRCreateCordbObject3)(
     HMODULE hmodTargetCLR,
     IUnknown **ppCordb);
 
+typedef HRESULT (STDAPICALLTYPE *FPCreateRemoteCordbObject)(
+    DWORD port,
+    LPCSTR assemblyBasePath,
+    IUnknown **ppCordb);
+
 HRESULT CreateCoreDbg(
     HMODULE hCLRModule,
     DWORD processId,
@@ -2151,3 +2156,41 @@ CLRCreateInstance(
 
     return pDebuggingImpl->QueryInterface(riid, ppInterface);
 }
+
+HRESULT CreateCoreDbgRemotePort(HMODULE hDBIModule, DWORD portId, LPCSTR assemblyBasePath, IUnknown **ppCordb)
+{
+    HRESULT hr = S_OK;
+
+    FPCreateRemoteCordbObject fpCreate =
+        (FPCreateRemoteCordbObject)GetProcAddress(hDBIModule, "CreateRemoteCordbObject");
+    if (fpCreate == NULL)
+    {
+        return CORDBG_E_INCOMPATIBLE_PROTOCOL;
+    }
+
+    return fpCreate(portId, assemblyBasePath, ppCordb);
+
+    return hr;
+}
+
+DLLEXPORT
+HRESULT
+RegisterForRuntimeStartupRemotePort(
+    _In_ DWORD dwRemotePortId,
+    _In_ LPCSTR mscordbiPath,
+    _In_ LPCSTR assemblyBasePath,
+    _Out_ IUnknown ** ppCordb)
+{
+    HRESULT hr = S_OK;
+    HMODULE hMod = NULL;
+
+    hMod = LoadLibraryA(mscordbiPath);
+    if (hMod == NULL)
+    {
+        hr = CORDBG_E_DEBUG_COMPONENT_MISSING;
+        return hr;
+    }
+
+    hr = CreateCoreDbgRemotePort(hMod, dwRemotePortId, assemblyBasePath, ppCordb);
+    return S_OK;
+}
index 34c71e5152386305890361dd110565ed86058aba..b186a5da8c1a81bcbd98c628224520ae1c97966e 100644 (file)
@@ -105,3 +105,10 @@ CreateDebuggingInterfaceFromVersion3(
     _In_ LPCWSTR szApplicationGroupId,
     _In_ ICLRDebuggingLibraryProvider3* pLibraryProvider,
     _Out_ IUnknown ** ppCordb);
+
+EXTERN_C HRESULT
+RegisterForRuntimeStartupRemotePort(
+    _In_ DWORD dwRemotePortId,
+    _In_ LPCSTR mscordbiPath,
+    _In_ LPCSTR assemblyBasePath,
+    _Out_ IUnknown ** ppCordb);
index 8b6572e1f08ac18725f2962eecb9b700b2c3d71e..c06fc5e399ce79f4ca6bcaa8e881671f4f5dd38d 100644 (file)
@@ -18,3 +18,4 @@ EXPORTS
     CreateDebuggingInterfaceFromVersion2
     CreateDebuggingInterfaceFromVersion3
     CLRCreateInstance
+    RegisterForRuntimeStartupRemotePort
index fae2869f381a920c80aeff8ae0c812111e3eebe2..709b33705f031bb772e558181ded9a86019ff49a 100644 (file)
@@ -17,3 +17,4 @@ CreateDebuggingInterfaceFromVersionEx
 CreateDebuggingInterfaceFromVersion2
 CreateDebuggingInterfaceFromVersion3
 CLRCreateInstance
+RegisterForRuntimeStartupRemotePort