2008-08-28 35 views
7

Chắc chắn điều này đã xảy ra với mọi người trước đây, một cái gì đó hoạt động trong chế độ gỡ lỗi, bạn biên dịch trong bản phát hành, và một cái gì đó phá vỡ.Cách tốt nhất để gỡ lỗi một ứng dụng chế độ phát hành

Điều này xảy ra với tôi trong khi làm việc trên môi trường Embedded XP, cách tốt nhất tôi tìm thấy để làm điều đó thực sự là viết một tệp nhật ký để xác định nơi nó sẽ đi sai.

Kinh nghiệm/khám phá của bạn đang cố gắng giải quyết một lỗi Chế độ phát hành gây phiền toái là gì?

Trả lời

0

Nếu nó chỉ là một phần nhỏ của ứng dụng cần gỡ lỗi thì bạn có thể thay đổi các tệp nguồn đó chỉ để được xây dựng mà không cần tối ưu hóa. Có lẽ bạn tạo ra thông tin gỡ lỗi cho tất cả các bản dựng và vì vậy điều này làm cho ứng dụng chạy chủ yếu như trong bản phát hành, nhưng cho phép bạn gỡ lỗi các phần thú vị một cách chính xác.

0

Cách sử dụng báo cáo Trace. Họ đang có để kiểm tra giá trị chế độ phát hành.

Trace.WriteLine(myVar); 
3

Đảm bảo bạn có sẵn các biểu tượng gỡ lỗi tốt (bạn có thể thực hiện việc này ngay cả khi có bản phát hành). Bạn sẽ có thể nhận được một dấu vết ngăn xếp và hy vọng các giá trị của một số biến. Một kiến ​​thức tốt về ngôn ngữ lắp ráp có lẽ cũng hữu ích vào thời điểm này.

Trải nghiệm của tôi nói chung là lỗi liên quan đến mã gần khu vực bị vỡ. Đó là để nói, nếu bạn đang thấy một vấn đề phát sinh trong hàm "LoadConfigInfoFromFile" thì có lẽ bạn nên bắt đầu bằng cách phân tích chặt chẽ vấn đề đó, thay vì "DrawControlsOnScreen", nếu bạn biết ý tôi là gì. "Hành động ma quái ở một khoảng cách" loại lỗi không có xu hướng phát sinh thường xuyên (mặc dù khi họ làm, họ có xu hướng là một con gấu lớn).

0

Tôi đồng ý gỡ lỗi tệp nhật ký để thu hẹp.

Tôi đã sử dụng "Nhập tên hàm" "Rời khỏi FunctionName" cho đến khi tôi có thể tìm thấy phương thức mà nó nhập trước khi xảy ra sự cố. Sau đó, tôi thêm nhiều thông điệp tường trình hơn để biên dịch lại và phát hành lại.

0

Bên cạnh việc phát bằng cách tắt tối ưu hóa và/hoặc bật thông tin gỡ lỗi cho Bản phát hành phát hành của bạn dưới dạng pauldoo cho biết, tệp nhật ký sẽ có dữ liệu tốt có thể thực sự hữu ích. Tôi đã từng viết một ứng dụng "theo dõi" có thể ghi nhật ký theo dõi cho ứng dụng nếu nó đang chạy khi bản phát hành khởi chạy (nếu không kết quả sẽ đi đến cửa sổ đầu ra của trình gỡ lỗi nếu chạy dưới trình gỡ lỗi). Tôi đã có thể có người dùng cuối gửi email cho tôi các tệp nhật ký từ họ sao chép các lỗi mà họ đang xem và đó là cách duy nhất tôi có thể tìm thấy sự cố trong ít nhất một trường hợp.

0

Mặc dù có thể không sử dụng được trong môi trường nhúng, tôi đã may mắn với WinDbg để gỡ lỗi các ứng dụng Windows chế độ phát hành. Ngay cả khi ứng dụng không được biên dịch với thông tin biểu tượng, bạn có thể ít nhất có được một dấu vết ngăn xếp có thể sử dụng và nhiều thông tin về sự cố hữu ích khác.

0

Bạn cũng có thể sao chép biểu tượng gỡ lỗi của mình vào môi trường sản xuất ngay cả khi nó được biên dịch trong chế độ relase

Here 's một bài báo với nhiều thông tin

0

Nếu bạn vấn đề được đồng bộ hóa liên quan log bán phá giá trong tập tin có thể có vấn đề.
Trong trường hợp này tôi thường sẽ sử dụng một số mảng lớn của chuỗi và đổ này vào màn hình/tập tin sau khi vấn đề được tái tạo.
Điều này tất nhiên phụ thuộc vào hạn chế bộ nhớ của bạn, đôi khi tôi chỉ sử dụng một vài ký hiệu và số để lưu trữ trong mảng nếu bộ nhớ trên nền tảng bị hạn chế. Đọc các bản ghi như vậy không phải là một niềm vui lớn, nhưng đôi khi đây là sự lựa chọn duy nhất.

2

Tracefile luôn là ý tưởng hay. Khi đó là về sự cố, tôi đang sử dụng adplus, một phần của công cụ gỡ lỗi cho cửa sổ. về cơ bản những gì adplus làm, là, nó gắn windbg vào thực thi bạn đang theo dõi. Khi ứng dụng gặp sự cố, bạn sẽ gặp phải sự cố và một tệp nhật ký. Bạn có thể tải đổ rác trong trình gỡ lỗi ưa thích của bạn và tìm hiểu, hướng dẫn nào dẫn đến sự cố.

Khi bản xây dựng bản phát hành được tối ưu hóa rất nhiều so với bản dựng lỗi, cách bạn biên dịch mã sẽ ảnh hưởng đến hành vi của nó. Điều này về cơ bản là đúng khi sự cố trong mã đa luồng xảy ra trong phiên bản phát hành nhưng không phải là phiên bản gỡ lỗi. adplus và windbg đã giúp tôi, để tìm hiểu, nơi điều này xảy ra.

ADPlus được giải thích ở đây: httx: //support.microsoft.com/ SCID = kb% 3Ben-us% 3B286350 & x = 15 & y = 12

Về cơ bản những gì bạn phải làm là: 1. Tải về và cài đặt WinDbg vào C: \ gỡ rối httx: //www.microsoft.com/whdc/devtools/debugging/default.mspx

  1. khởi động ứng dụng của bạn

  2. mở cmd và cd c: \ gỡ rối

  3. bắt đầu adplus như thế này:

"adplus.bat -crash your_exe.exe"

  1. tái tạo sự cố

  2. phân tích crashdump trong vs2005 hoặc trong windbg

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