2010-11-09 28 views
7

Tôi đang cố gỡ lỗi từ xa chương trình C#. Kết nối với máy chủ không phải là vấn đề và tôi có thể xem tất cả các quy trình đang chạy trên máy đó và có thể kết nối với msvsmon.exe.Gỡ lỗi tệp thực thi C# bị lỗi khi khởi chạy

Tuy nhiên, chương trình tôi muốn gỡ lỗi sự cố ngay lập tức khi khởi chạy khiến tôi không có thời gian để tự đính kèm vào nó. Cũng tung ra thực thi gỡ lỗi trong câu hỏi thông qua một vị trí từ xa không có gì. Làm cách nào để đính kèm trình gỡ lỗi trước khi xảy ra sự cố?

Trả lời

10

Sự cố khi khởi chạy có thể do thiếu phụ thuộc. Chạy fuslogvw.exe trước khi bắt đầu ứng dụng của bạn và xem liệu bất kỳ hoạt động ràng buộc nào không thành công.

Nếu điều đó không có tác dụng, thường là cách thực hành tốt để chuẩn bị đăng nhập chẩn đoán. Bạn có thể sử dụng thư viện ghi nhật ký chuyên dụng, ví dụ: log4net, hoặc ít nhất bạn nên sử dụng hình thức ghi nhật ký đơn giản nhất qua System.Diagnostics.Trace. Bạn có thể nghe tin nhắn theo dõi bằng cách định cấu hình trình theo dõi trong app.config hoặc sử dụng các công cụ của bên thứ ba như trình gỡ lỗi hoặc DebugView từ Sysinternals.

Nếu bạn thực sự muốn đính kèm một trình gỡ lỗi bạn có thể chèn một breakpoint lập trình:

System.Diagnostics.Debugger.Break(); 

tôi đã không kiểm tra cách làm việc này với một trình gỡ lỗi từ xa, nhưng như một phương sách cuối cùng bạn có thể có giấc ngủ đơn của bạn đủ dài để cho phép bạn đính kèm một trình gỡ lỗi:

System.Threading.Thread.Sleep(30000); 
+0

+1 DebugView là một trong những công cụ của tôi. – kenny

0

Cuối cùng sau nhiều lần khám phá, tôi nhận thấy WPF là nguyên nhân của sự cố. Blog của Rudsen cho thấy answer.

Trong nhật ký ứng dụng sẽ là lỗi sau;

.NET Runtime 4,0 Error Reporting

eventType clr20r3, P1 eobfrontend.exe, P2 1.0.0.0, P3 4cd95cc7, P4 presentationframework, P5 4.0.0.0, P6 4ba1f8db, P7 78ff, P8 0, hệ thống P9. windows.markup.xamlparse, P10 NIL.

Thực hiện như Rudsen đã nhận xét "rằng lỗi có nghĩa là đã xảy ra lỗi khi chạy phân tích cú pháp mã xaml". Tôi làm theo các bước được nêu "Mở Debug> Ngoại lệ và kích hoạt hộp kiểm trong cột" ném "cho" Ngoại lệ thời gian chạy ngoại ngữ chung ". Đã hoàn tất, Visual Studio sẽ tạm dừng tất cả ngoại lệ."

13

Một trong những thủ thuật yêu thích của tôi khi đính kèm trình gỡ lỗi khi khởi chạy chương trình đang sử dụng Image File Execution Options. Đó là một cơ sở đăng ký cho phép bạn, trong số những thứ khác, đính kèm một trình gỡ rối vào một ứng dụng trước khi thực thi nó. Cùng một mẹo cho phép, ví dụ, thay thế Trình quản lý tác vụ Windows của bạn bằng Process Explorer hoặc Notepad.exe với Notepad2.

Bạn có thể đọc tất cả về nó here.

Đây là cách bạn thiết lập nó:

  • Run regedit.exe
  • Đến HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • Tạo một khóa mới có tên như exe của bạn (ví dụ: yourprogram.exe)
  • Tạo mới chuỗi giá trị dưới exe của bạn. Tên của chuỗi giá trị là Debugger, và giá trị là vsjitdebugger.exe

Khi bạn chạy file thực thi, bạn sẽ thấy những Just In Time dấu nhắc yêu cầu bạn chọn một trình gỡ lỗi:

vsjitdebugger

Khi hộp thoại này đang mở, hãy đính kèm từ xa vào quy trình của bạn và nhấn No trên hộp thoại.

Hy vọng điều đó sẽ hữu ích.

+1

Crickey, điều này khá hữu ích. Không nhận ra điều này có thể được thực hiện. – wonea

+1

GFlags là một công cụ miễn phí của Microsoft sẽ thiết lập tùy chọn này trong sổ đăng ký cho bạn, cũng như nhiều tùy chọn gỡ lỗi hữu ích khác. Nó có sẵn miễn phí tại http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx Nó cũng có giá trị sử dụng khi bạn cần phải thiết lập một trình gỡ rối để chạy mỗi khi một chương trình hoặc dịch vụ chạy trên một hệ thống. – StarPilot

Các vấn đề liên quan