Tài liệu Steamworks
Báo cáo lỗi Steam
Lưu ý: Báo cáo lỗi Steam chỉ được hỗ trợ cho ứng dụng Windows 32-bit.

Tổng quan

Nếu triển khai trình báo lỗi Steam thì Steam sẽ tự động tải lên các dump nhỏ của bất kỳ exception nào sau khi 10 exception tương tự xuất hiện.

Bạn có thể xem chi tiết về mỗi đợt ngắt đột ngột trên trang báo cáo lỗi của backend đối tác Steamworks.

Các dump nhỏ luôn được lưu trữ nội bộ trên máy trước khi được tải lên Steam. Nếu cần kiểm nghiệm trực tiếp, bạn sẽ tìm được một dump trong thư mực cài đặt trò chơi.

Cách triển khai

Báo cáo lỗi Steam rất dễ sử dụng nếu bạn đã dùng qua Structured Exception Handling.

Bạn phải kết nối hàm Win32 _set_se_translator để gọi ra hàm mà bạn tạo để xử lý các dump nhỏ. Trong hàm đó, bạn có thể dùng SteamAPI_SetMiniDumpCommentSteamAPI_WriteMiniDump để thông báo cho Steam về sự cố ngắt đột ngột sắp xảy ra.

Ví dụ

#ifdef _WIN32 #include <Windows.h> void MiniDumpFunction( unsigned int nExceptionCode, EXCEPTION_POINTERS *pException ) { // Bạn có thể build và đặt một bình luận để nhúng vào dump nhỏ tại đây, // có thể bạn muốn đặt vào màn mà người chơi đang đi, có bao nhiêu người chơi trên máy chủ, // có bao nhiêu bộ nhớ trống, v.v... SteamAPI_SetMiniDumpComment( "Minidump comment: SteamworksExample.exe/n" ); // Số 0 ở đây là ID bản build, chúng tôi không đặt nó SteamAPI_WriteMiniDump( nExceptionCode, pException, 0 ); } int RealMain( HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow ) { __debugbreak(); return 0; } int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // Tất cả ta làm ở đây là gọi hàm chính thực sự sau khi thiết lập se translator // điều này cho phép ta bắt các exception và báo cáo lỗi tới Steam. // // Lưu ý, để phương pháp thiết lập này hoạt động // bạn phải đặt đúng các flag compiler của mình để bật xử lý exception. if ( IsDebuggerPresent() ) { // Chúng ta không muốn mask các exception (hoặc báo cáo chúng tới Steam!) khi gỡ lỗi. // Nếu bạn muốn đi qua bộ xử lý exception, đính kèm gỡ lỗi // sau khi chạy trò chơi ngoài công cụ gỡ lỗi. return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // khối try này cho phép SE translator hoạt động { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif

Yêu cầu

API báo cáo lỗi hiện nay chỉ hỗ trợ ứng dụng 32-bit trên Windows.