Windows錯誤碼解析

來源:互聯網
上載者:User

標籤:

閱讀目錄

  • Windows API 錯誤碼解析
  • Windows異常值解析
  • ErrLook程式
  • 參考資料

C或者C++開發肯定經常會遇到各種錯誤碼,由於每個錯誤碼只是一個枚舉或者一個整形數值,調試或者輸出日誌的時候,無法知道這個錯誤碼的具體含義,這時候就需要將此錯誤碼解釋出來。對於自己定義的錯誤碼,可以通過自己的方式進行解析。對於Windows API的錯誤碼,則需要調用Windows的API進行解析,下面來介紹具體的錯誤碼解析方法。

回到頂部 Windows API 錯誤碼解析

調用Windows API失敗後,通常需要通過GetLastError來擷取對應的錯誤碼,要將此錯誤碼解析為對應的描述資訊,則需要調用另外一個Windows API FormatMessage,原型如下:

 Collapse
DWORD WINAPI FormatMessage(  _In_      DWORD dwFlags,  _In_opt_  LPCVOID lpSource,  _In_      DWORD dwMessageId,  _In_      DWORD dwLanguageId,  _Out_     LPTSTR lpBuffer,  _In_      DWORD nSize,  _In_opt_  va_list *Arguments);

具體的參數意義就不在這裡介紹了,直接查看MSDN即可,下面來看一下具體的使用方法樣本:

 Collapse
char msg[1024] = { 0 };FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, 5, LANG_NEUTRAL, msg, _countof(msg), NULL);cout << msg << endl;

運行程式即可看到對應的錯誤描述:拒絕訪問

回到頂部 Windows異常值解析

程式在啟動並執行時候,難免會產生一些異常,通過Windows的SEH機制可以得到此異常資訊,其中會包含一個異常值,比如0xC0000008。如果用上面提到的FormatMessage的方式,擷取到的訊息是一個字串,或者無法擷取到此異常值的描述。那麼如何擷取這個異常值的描述呢,仔細看FormatMessage API的MSDN文檔,可以看到有這樣一個標誌:

 Collapse
FORMAT_MESSAGE_FROM_HMODULE

這個標誌的意思是:可以通過其他模組,來解釋此異常值或者錯誤碼。

那麼什麼模組會包含Windows異常值的定義和解釋呢,通過Google或者MSDN可以知道,是“ntdll.dll”

知道了這些,就可以寫程式來解釋Windows異常值了,代碼如下:

 Collapse
char msg[1024] = { 0 };HMODULE hntdll = LoadLibrary("NTDLL.DLL");FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE,     hntdll, 0xC0000008, LANG_NEUTRAL, msg, _countof(msg), NULL);FreeLibrary(hntdll);cout << msg << endl;
回到頂部 ErrLook程式

當的程式中確實需要對Windows錯誤碼和Windows異常值進行解析的時候,就可以使用上面的方法進行解析。

但是當我們只是簡單的想看看一個錯誤碼的解釋的時候,難道還必須寫一個程式來解釋嗎。

微軟也考慮到了你正在思考的這一點,所以在安裝了VS後,都會附帶一個小工具,用來解釋錯誤碼,叫做:ErrLook,一般可以在VS的工具菜單中看到,或者可以在“VS目錄\Common7\Tools”目錄下找到這個程式,如下:

http://www.cnblogs.com/hbccdf/p/windows_error_code_parsing.html

Windows錯誤碼解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.