2012-04-05 25 views
8

Nếu ứng dụng VB6 đang gây ra sự kiện Application Hang để xuất hiện trong Trình xem sự kiện, làm cách nào tôi có thể tìm hiểu thêm về lý do ứng dụng bị treo?Làm cách nào để tìm hiểu thêm về sự kiện Ứng dụng Hang?

Sự kiện Application Hang có nghĩa là ứng dụng đã bị đóng băng và bị lỗi hoặc chỉ tạm thời bị treo?

Tất cả tôi nhận được trong bản ghi sự kiện cho sự kiện này là:

Hanging application [MyAppName].exe, version [MyAppVersionNo], hang module hungapp, version 0.0.0.0, hang address 0x00000000. 

Đó không phải là đủ và tôi muốn để có thể tìm hiểu thêm về lý do tại sao nó được treo. Những thay đổi mã hoặc các bước khác cần phải được thực hiện để gây ra các ứng dụng để cung cấp thêm chi tiết trong bản ghi sự kiện?

+0

Ứng dụng của bạn có thói quen chạy dài khi bận và không thể trả lời tin nhắn Windows không? – jac

+0

Không phải là tôi biết. Nhật ký sự kiện này đến từ một trang web khách hàng. Tôi muốn sự kiện này hiển thị thêm thông tin về những gì đã xảy ra vào thời điểm đó. – CJ7

+0

Bạn có thể thực hiện quá trình kết xuất bộ nhớ (hoặc để người dùng thực hiện) khi ứng dụng bị treo và sau đó phân tích nó và nhìn vào ngăn xếp cuộc gọi. – MicSim

Trả lời

5

Tôi khuyên bạn nên sử dụng Bộ công cụ hiệu suất của Windows.Phiên bản tốt nhất để sử dụng là trong Windows Assessment & Deployment Kit, http://www.microsoft.com/download/en/details.aspx?id=28997

Sau khi cài đặt xong, bạn cần khởi động Windows Performance Recorder (WPR) và nhấp vào nút Bắt đầu để bắt đầu ghi. Tiếp theo, tạo lại sự cố với ứng dụng của bạn. Sau đó quay lại WPR và nhấn nút Lưu. Tiếp theo, tải lên Windows Performance Analyzer và mở tập tin * .ETL đã được tạo ra. Sau đó, bạn muốn đi đến phần Hoạt động hệ thống trong Graph Explorer, mở rộng nó và tìm biểu đồ Giao diện người dùng bị chậm trễ (hoặc có thể là biểu đồ đầu tiên đỗ trên Hoạt động hệ thống). Nhấp đúp vào nó để có được phiên bản chi tiết trong tab Phân tích.

Khi bạn tìm thấy sự chậm trễ giao diện người dùng mà bạn quan tâm, bạn có thể thêm một biểu đồ khác như Sử dụng CPU (Lấy mẫu) từ nút Xử lý trong Graph Explorer. Khi hai biểu đồ nằm trong cùng một tab Phân tích, việc cuộn và chọn của chúng sẽ được đồng bộ hóa. Vì vậy, bạn có thể nhấp vào sự kiện Giao diện người dùng trễ và nó cũng sẽ làm nổi bật phạm vi tương ứng trong Cách sử dụng CPU.

+0

Liên kết ở trên đã chết, hãy thử https://www.microsoft.com/en-US/download/details.aspx?id=39982 nó chỉ cho tôi thấy ADK cho Win 8.1 ... – Jakob

+0

Tôi nghĩ rằng đó là một phần của SDK ngay bây giờ, bắt đầu bằng Windows 10. https://dev.windows.com/en-us/downloads/windows-10-sdk –

2

Sự kiện Hang ứng dụng có nghĩa là Windows đã quyết định rằng ứng dụng không phản hồi. Vì sự kiện được tạo ra bởi hệ điều hành chứ không phải ứng dụng, các tùy chọn của bạn để nhận thông tin bổ sung trong sự kiện này rất hạn chế.

Đây là những gì có vẻ là có sẵn trên một sự kiện Application Hằng:

nhắn: Treo ứng dụng% 1, phiên bản% 2, treo mô-đun% 3, phiên bản% 4, treo địa chỉ 0x% 5.

Từ:

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1002&EvtSrc=Application+Hang&LCID=1033

Nếu bạn tin rằng nguyên nhân của sự kiện này là cái gì mà ứng dụng của bạn không (như trái ngược với một cái gì đó trong môi trường nơi mà các ứng dụng đang chạy), sau đó thay vì cố gắng để vượt qua thông tin cho sự kiện treo, bạn nên tăng mức độ thông tin nhật ký vào chế độ gỡ lỗi và tìm trong tệp nhật ký của ứng dụng để xem nó đang làm gì trước khi trở thành không phản hồi.

Nếu bạn thiếu thông tin đăng nhập hoặc khung đăng nhập trong ứng dụng của mình, thì rằng là nơi bạn nên tập trung nỗ lực của mình. Điều ngược lại là bạn sẽ được hưởng lợi từ việc đăng nhập tốt hơn trong tương lai. Tuy nhiên, hãy sử dụng khung ghi nhật ký để bạn có thể tắt tính năng ghi nhật ký mức gỡ lỗi trong môi trường sản xuất, khi mọi thứ đang chạy trơn tru.

2

Tôi sẽ tiếp cận điều này bằng cách xem lại mã trong mô-đun mà Windows đã xác định đã bị treo, tên đã được ghi vào nhật ký sự kiện. Cố gắng để có được chi tiết hơn trong sự kiện treo sẽ không thể được bởi vì khi Windows đã xác định ứng dụng không phản hồi, đã quá muộn.

Vào mô-đun đang treo, tôi sẽ thêm nhiều cuộc gọi vào DoEvents cũng như thông báo trạng thái ghi nhật ký trực tiếp vào EventLog. Thêm một khung khai thác gỗ vào thời điểm này sẽ giới thiệu sự phức tạp và liên quan đến cơ sở dữ liệu hoặc truy cập tệp để lưu trữ các bản ghi.

Windows cho rằng ứng dụng đã bị treo vì ứng dụng đã ngừng trả lời thư. Thật không may, việc thực hiện một chuỗi thứ hai trong ứng dụng VB6 của bạn không phải là tầm thường, không giống như .NET. Không bao giờ-ít, việc thêm một luồng khác sẽ giữ cho ứng dụng đáp ứng, nhưng sau đó bạn có thể vẫn còn bị trả lời câu hỏi, "tại sao mã mất quá nhiều thời gian để thực thi?"

0

Nhận thông tin từ phối cảnh sự kiện của cửa sổ sẽ không giúp ích. Cố gắng truy tìm trong ứng dụng của bạn để giúp bạn có được nguyên nhân chính xác.