Получается, что можно напрямую вызвать vsjitdebugger.exe с помощью PID текущего процесса. Убедитесь, что в приложении «Инструменты» -> «Параметры» - «Отладка» - «Времени времени» в Visual Studio выбрано «Родной».
Вот код C++ для запуска отладчика. Он использует UNICODE версии различных API Win32. Я получаю системный каталог, потому что CreateProcess() не использует PATH.
bool launchDebugger()
{
// Get System directory, typically c:\windows\system32
std::wstring systemDir(MAX_PATH+1, '\0');
UINT nChars = GetSystemDirectoryW(&systemDir[0], systemDir.length());
if (nChars == 0) return false; // failed to get system directory
systemDir.resize(nChars);
// Get process ID and create the command line
DWORD pid = GetCurrentProcessId();
std::wostringstream s;
s << systemDir << L"\\vsjitdebugger.exe -p " << pid;
std::wstring cmdLine = s.str();
// Start debugger process
STARTUPINFOW si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcessW(NULL, &cmdLine[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) return false;
// Close debugger process handles to eliminate resource leak
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// Wait for the debugger to attach
while (!IsDebuggerPresent()) Sleep(100);
// Stop execution so the debugger can take over
DebugBreak();
return true;
}
я столкнулся с той же проблемой, а также не нашли никакого решения. Я, наконец, решил свою проблему, поставив вызов System.Diagnostics.Debugger.Launch в DLL смешанного режима, экспортировал функцию как неуправляемую функцию, а затем явно загрузил библиотеку с помощью LoadLibrary из моего неуправляемого приложения. – Patrick
Это классно, но не тогда, когда ваше приложение имеет CLR. Загрузка управляемой библиотеки kinda messes вверх по всему предмету хостинга –