2012-06-15 37 views
6

Một số thời gian trước đây tôi đã đọc một bài viết về CLR, nơi tác giả đã cho thấy rằng nếu một dự án được biên dịch trong chế độ DEBUG, trước khi mỗi toán tử đi kèm lệnh NOP, do đó cho phép gỡ lỗi mã. Tuy nhiên, hôm nay tôi phát hiện ra rằng chúng tôi cũng có thể gỡ lỗi trong chế độ phát hành ... Hãy giúp hiểu sự khác biệt.Gỡ lỗi trong .NET ở chế độ Release

+1

Làm cách nào? Tôi không thực sự biết làm thế nào bạn có thể gỡ lỗi trong chế độ phát hành – crassr3cords

+0

Tôi gặp phải rằng tôi không thể di chuyển đến các asseblies khác trong khi tôi đã gỡ lỗi trong chế độ phát hành –

Trả lời

1

Bạn có thể gỡ lỗi trong chế độ Phát hành ở mức độ nào đó. Gỡ lỗi và phát hành chỉ đơn giản là xây dựng các cấu hình (trong đó bạn có thể tạo nhiều), sự khác biệt thực sự là cấu hình Debug không tối ưu hóa mã nhị phân được tạo ra (mã tối ưu hóa phức tạp gỡ lỗi). Nó cũng tạo ra dữ liệu gỡ lỗi bổ sung mà bản phát hành không.

+0

Vì vậy, bạn đang nói rằng cấu hình Debug phức tạp gỡ lỗi ?? –

+0

Không, xin lỗi, tôi đã nói tối ưu hóa mã phức tạp để gỡ lỗi. Tôi sẽ viết lại nó để nó không gây nhầm lẫn. – erodewald

5

Debugging .net mã để bạn có thể bước qua mã nguồn khi nó được thực thi thường đòi hỏi ba điều:

  • Biểu tượng (file .pdb liên quan) được xây dựng cùng với việc lắp ráp. dll hoặc .exe
  • Nguồn (các cs liên quan, .vb vv files)
  • mã máy hành án phải được unoptimized

Ký hiệu được kiểm soát bởi cờ /debug:{full | pdbonly}. Nếu bạn chỉ định /debug:full (ngay cả trong bản phát hành bản phát hành, với việc tối ưu hóa trình biên dịch bị tắt), bạn có thể đính kèm vào quy trình đã chạy và thực hiện từng bước. Nếu bạn có /debug:pdbonly, thì bạn phải sử dụng trình gỡ lỗi để khởi động chương trình (và không thể xem biểu tượng khi đính kèm vào một quá trình đang chạy).

Tối ưu hóa được kiểm soát chi tiết theo tùy chọn trình biên dịch /debug, nhưng có thể được kiểm soát thêm bởi /optimize-.

2

Biên dịch trong chế độ phát hành tối ưu hóa nhị phân kết quả, điều này làm cho trình gỡ lỗi khó hơn (nhưng không thể) để biết mã nhị phân nào đến từ dòng mã nguồn nào.

Chế độ gỡ lỗi được thiết kế để giúp trình gỡ lỗi 'theo dõi' dễ dàng hơn, do đó, nó tách dòng mã bằng NOP và không tối ưu hóa kết quả nhị phân.

+0

Ý tôi là, điều kỳ lạ là sự kiểm soát lớn như vậy được cấp cho các quy trình này. Bởi vì hôm nay tôi thấy đồng nghiệp của tôi đã liên tục sửa mã trong chế độ Release và khi tôi hỏi anh ấy về điều này, anh ấy không biết. –

+0

Nếu không có các biểu tượng gỡ lỗi (tệp .pdb), trình gỡ lỗi sẽ không biết mã nguồn ban đầu là gì, nhưng nó vẫn có thể bước qua mã nhị phân. AFAIK, một trình gỡ lỗi có thể đính kèm vào bất kỳ quá trình nào mà nó muốn và bước qua nó. Hệ điều hành cung cấp rất nhiều quyền hạn cho các trình gỡ rối. –

+0

Hm, do đó, nó sẽ khó khăn hơn cho trình gỡ lỗi, nhưng vẫn có thể? (Tôi có nghĩa là, không có tập tin pdb)? –

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