私はかなりユニークな問題があります。私は存在しないときに長時間ヘッドレスボックスで動作するアプリケーションを持っていますが、重要ではありません。 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();
私は離れていて、アプリケーションが効果的に自分自身を一時停止し、リモートデバッガ付けるのを待ちながら、この方法は、私はエラーを打つということでアイデアこれは最初のcontinueの後にDebugger.Break
コールのおかげで自動的に適切なコンテキストを取得します。
ここに問題があります:SuspendAllButCurrentThread
の実装は重要ではないことが判明しました。 Thread.Suspend
は推奨されておらず、SuspendThread
にP/Invokeすることはできません。管理スレッドとネイティブスレッドの間に1対1のマッピングがないからです(現在のスレッドを生かしておく必要があるため)。おそらく避けることができれば、問題のマシンにVisual Studioをインストールしたくありません。どうすればこの作品を作れますか?
おそらく、愚かな質問かもしれませんが、VSは、これらのフープを飛び越える必要なく、リモートデバッグを許可していませんか?私はいつもコード変更なしでリモートでデバッグできると思っていましたが、私はローカルでデバッグしたことを認めなければなりません – Surfbutler