Tôi có một vấn đề có thể khá độc đáo. Tôi có một ứng dụng chạy trên một hộp không đầu trong nhiều giờ khi tôi không có mặt, nhưng không quan trọng. Tôi muốn có thể gỡ lỗi ứng dụng này từ xa bằng cách sử dụng Visual Studio. Để làm như vậy, tôi có mã trông như thế này:C# đình chỉ tất cả các chủ đề
// 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();
Ý tưởng được rằng cách này, tôi nhấn một lỗi trong khi tôi đi, và việc áp dụng có hiệu quả tạm dừng bản thân và chờ đợi một trình gỡ lỗi từ xa đính kèm , sau lần đầu tiên tiếp tục tự động nhận được ngữ cảnh phù hợp nhờ cuộc gọi Debugger.Break
.
Đây là vấn đề: Triển khai SuspendAllButCurrentThread
hóa ra là không cần thiết. Thread.Suspend
không được dùng nữa và tôi không thể P/Gọi xuống SuspendThread
vì không có ánh xạ một-một giữa các chuỗi được quản lý và chuỗi gốc (vì tôi cần giữ nguyên luồng hiện tại). Tôi không muốn cài đặt Visual Studio trên máy trong câu hỏi nếu nó có thể có thể tránh được. Làm thế nào tôi có thể thực hiện công việc này?
Câu hỏi ngu ngốc có thể, nhưng không VS cho phép gỡ lỗi từ xa mà không cần phải nhảy qua các vòng này? Tôi luôn giả định rằng bạn có thể gỡ lỗi từ xa mà không cần thay đổi mã, nhưng tôi phải thừa nhận rằng tôi đã từng sửa lỗi cục bộ, – Surfbutler