Ho un problema che può essere abbastanza unico. Ho un'applicazione che funziona su una casella senza testa per lunghe ore quando non sono presente, ma non è critica. Mi piacerebbe essere in grado di eseguire il debug di questa applicazione in remoto utilizzando Visual Studio. Per fare ciò, ho il codice che assomiglia a questo:C# che sospende tutti i thread
// Suspend all other threads to prevent loss
// of state while we investigate the issue.
SuspendAllButCurrentThread();
var remoteDebuggerProcess = new Process
{
StartInfo =
{
UseShellExecute = true,
FileName = MsVsMonPath;
}
};
// Exception handling and early return removed here for brevity.
remoteDebuggerProcess.Start();
// Wait for a debugger attach.
while (!Debugger.IsAttached)
{
Thread.Sleep(500);
}
Debugger.Break();
// Once we get here, we've hit continue in the debugger. Restore all of our threads,
// then get rid of the remote debugging tools.
ResumeAllButCurrentThread();
remoteDebuggerProcess.CloseMainWindow();
remoteDebuggerProcess.WaitForExit();
L'idea è che in questo modo, mi ha colpito un errore durante la mia assenza, e l'applicazione stessa pause e attese per un debugger remoto collegare in modo efficace , che dopo la prima continua ottiene automaticamente il contesto giusto grazie alla chiamata Debugger.Break
.
Ecco il problema: l'implementazione di SuspendAllButCurrentThread
risulta non banale. Thread.Suspend
è deprecato e non riesco a inoltrare P/Invoke a SuspendThread
perché non esiste un mapping uno a uno tra thread gestiti e thread nativi (poiché è necessario mantenere attivo il thread corrente). Non voglio installare Visual Studio sulla macchina in questione se può essere evitato. Come posso fare questo lavoro?
Domanda stupida probabilmente, ma VS non consente il debug remoto senza che sia necessario saltare attraverso questi cerchi? Ho sempre pensato che fosse possibile eseguire il debug remoto senza modifiche al codice, ma devo ammettere che ho sempre eseguito il debug in locale, – Surfbutler