2009-01-22 54 views
11

Tôi đang làm việc với một khung bên thứ ba và mã này khá tệ và tôi nhận được các ngoại lệ mà tôi không thể tìm ra. Tôi đã có thể dịch ngược bằng cách sử dụng .NET Reflector, và bây giờ tôi đang cố gắng để gỡ lỗi bằng cách sử dụng Deblector, nhưng tôi thậm chí không thể tìm ra cách để có được một bộ breakpoint. Tại sao không có tài liệu cho công cụ này?Làm thế nào để sử dụng Deblector?

Không có gì để sử dụng. Trợ giúp tích hợp chỉ đơn giản là cung cấp một danh sách các lệnh, mà tôi hiểu rất tốt, vì chúng là các lệnh debugger chuẩn ... nhưng tôi không thể tìm ra cách làm cho nó hoạt động để tôi có thể bước qua mã và tôi cần cũng kiểm tra các biến.

Tôi đã googling trong một thời gian dài và tất cả những gì tôi có thể tìm thấy là blog nói công cụ này tuyệt vời như thế nào. Vâng, tôi chắc chắn nó sẽ được khá mát mẻ nếu tôi có thể làm cho nó hoạt động. Tài liệu ở đâu, hoặc làm cách nào để đặt điểm ngắt?

Tôi có thể làm cho nó gắn với quy trình của mình, nhưng tôi không thể tạm dừng hoặc bất cứ điều gì và nó không phá vỡ khi ngoại lệ xảy ra, mặc dù tôi đã kích hoạt tùy chọn đó.

Nghiêm túc ... chúng ta nên làm một số tài liệu - Tôi sẽ đăng chúng ở đâu đó mà Google có thể tiếp cận.

Trả lời

8

Có lẽ đây sẽ giúp bạn:

Trước hết, tôi đang sử dụng DeblectorAddin-1.01-Alpha từ (Tôi không biết nếu nó hoạt động như thế này trong các phiên bản cũ quá) từ http://www.codeplex.com/deblector.

Với phiên bản này, nó là khá đơn giản với các thủ tục sau đây:

  • Đính kèm để một quá trình

    • Với một [ttach] lệnh trong dòng lệnh: một <pid>.
    • Sử dụng nút đính kèm trên thanh công cụ (cửa sổ có bánh răng trong đó).
  • Nếu phần đính kèm thành công (bạn thấy điều này trong bảng điều khiển, được kích hoạt bằng Tools-> Deblector) tất cả các hội đồng được tham chiếu sẽ được tải.

  • Thiết lập một điểm break (bạn phải dừng chương trình để thiết lập một điểm break):

    • Sử dụng b [Reak] lệnh: ví dụ: b <Namespace.Class.Function> - có thêm tùy chọn sử dụng có sẵn trợ giúp b cho điều đó.
    • Đơn giản hơn nhiều: Sử dụng nút Break (hoặc F9) và chọn một hàng trong chế độ xem Ghi nợ IL.

ghi chú sử dụng bổ sung:

Deblector dòng lệnh:
Các dòng lệnh sẽ không trả lời nếu bạn đang gắn liền với một quá trình và chạy, bạn phải tạm dừng trước hoặc nó sẽ không trả lời đúng.

Đối với nền tảng 64-bit:
Ứng dụng này phải được thiết lập để chạy như ứng dụng 32-bit hoặc nó không thể được gắn vào.

Trong Visual Studio: Project -> Properties -> Xây dựng nền tảng mục tiêu: x86

Với corflags cụ: Điều này cần được cài đặt với Visual Studio (sử dụng Visual Studio dấu nhắc lệnh).

To set 32-bit mode: corflags <ProgramName> /32BIT+ 
To unset it:  corflags <ProgramName> /32BIT- 

Để tìm thấy quá trình ID và kiểm tra xem một chương trình chạy trong chế độ 32 hoặc 64-bit:
Process Explorer là rất hữu ích cho điều đó.

+0

Đủ tốt ... Tôi cuối cùng đã tìm ra, nhưng tôi đã quên câu hỏi này. Có lẽ nó sẽ hữu ích cho những người khác trong tương lai! Cảm ơn! – Jasmine

+0

ý của bạn là gì "bạn phải dừng chương trình để đặt điểm ngắt" ?? Làm thế nào tôi có thể ngăn chặn một chương trình withouth thiết lập một breakpoint? Nó giống như nói "để thiết lập một điểm ngắt đầu tiên, bạn phải thiết lập một breakpoint"! –

+0

Bạn có thể tạm dừng một chương trình ở vị trí hiện tại, điểm mà chương trình "ngắt" là lúc đó bất cứ nơi nào mà con trỏ chỉ xuất hiện tại thời điểm này. – Fionn

0

Hiện tại, có Reflector Pro, thực hiện điều đó. Nó giải mã các assembly được quản lý thành C# hoặc VB.NET và tạo các PDB cần thiết. Sau đó, bạn có thể thiết lập các điểm ngắt và bước vào bất kỳ hội đồng quản lý nào bạn muốn.

http://www.red-gate.com/products/reflector/walkthrough.htm

+0

Vâng, cảm ơn bạn Jason! Chúng tôi đã sử dụng nó, nhưng không thấy nó đáng để trả tiền. Hóa ra, bây giờ mà chúng tôi đã nhận được hệ thống của chúng tôi và chạy, các vấn đề thực sự khó khăn chủ yếu là giải quyết và chúng tôi không cần phải gỡ lỗi mã nhà cung cấp quá thường xuyên. Nhưng thật tuyệt khi biết chúng ta có thể – Jasmine

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