From ffe9a0f6ec189f675d3ba6d59bbd07beb60dfc21 Mon Sep 17 00:00:00 2001 From: Thays Grazia Date: Wed, 12 Apr 2023 18:37:05 -0300 Subject: [PATCH] Support debug connecting to a remote port (#3813) * 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 | 43 +++++++++++++++++++++++++++++ src/dbgshim/dbgshim.h | 7 +++++ src/dbgshim/dbgshim.ntdef | 1 + src/dbgshim/dbgshim_unixexports.src | 1 + 4 files changed, 52 insertions(+) diff --git a/src/dbgshim/dbgshim.cpp b/src/dbgshim/dbgshim.cpp index 5b9ac973f..a68d1ad65 100644 --- a/src/dbgshim/dbgshim.cpp +++ b/src/dbgshim/dbgshim.cpp @@ -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; +} diff --git a/src/dbgshim/dbgshim.h b/src/dbgshim/dbgshim.h index 34c71e515..b186a5da8 100644 --- a/src/dbgshim/dbgshim.h +++ b/src/dbgshim/dbgshim.h @@ -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); diff --git a/src/dbgshim/dbgshim.ntdef b/src/dbgshim/dbgshim.ntdef index 8b6572e1f..c06fc5e39 100644 --- a/src/dbgshim/dbgshim.ntdef +++ b/src/dbgshim/dbgshim.ntdef @@ -18,3 +18,4 @@ EXPORTS CreateDebuggingInterfaceFromVersion2 CreateDebuggingInterfaceFromVersion3 CLRCreateInstance + RegisterForRuntimeStartupRemotePort diff --git a/src/dbgshim/dbgshim_unixexports.src b/src/dbgshim/dbgshim_unixexports.src index fae2869f3..709b33705 100644 --- a/src/dbgshim/dbgshim_unixexports.src +++ b/src/dbgshim/dbgshim_unixexports.src @@ -17,3 +17,4 @@ CreateDebuggingInterfaceFromVersionEx CreateDebuggingInterfaceFromVersion2 CreateDebuggingInterfaceFromVersion3 CLRCreateInstance +RegisterForRuntimeStartupRemotePort -- 2.34.1