У меня есть проблема, которая может быть довольно уникальной. У меня есть приложение, которое работает в безголовой коробке в течение долгих часов, когда я не присутствую, но не критично. Я хотел бы иметь возможность отлаживать это приложение удаленно с помощью Visual Studio. Для того, чтобы сделать это, у меня есть код, который выглядит следующим образом:C# приостановить все темы
// 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();
Идея заключается в том, что этот путь, я ударил ошибку в то время как я далеко, и приложение эффективно приостанавливает себя и ждет удаленный отладчик присоединить , который после первого продолжения автоматически получает правильный контекст благодаря вызову Debugger.Break
.
Возникла проблема: Выполнение SuspendAllButCurrentThread
оказывается нетривиальным. Thread.Suspend
устарел, и я не могу выполнить P/Invoke до SuspendThread
, потому что между управляемыми потоками и собственными потоками нет однозначного сопоставления (так как мне нужно сохранить текущий поток в живых). Я не хочу устанавливать Visual Studio на рассматриваемую машину, если ее можно избежать. Как я могу сделать эту работу?
Глупый вопрос, вероятно, но не позволяет VS удаленная отладка без необходимости перепрыгивать через эти обручи? Я всегда предполагал, что вы можете удаленно отлаживать без изменений кода, но я должен признать, что я только когда-либо отлаживал локально, – Surfbutler