C 獲取系統相關資訊 詳細異常資訊

2021-06-06 15:38:10 字數 2225 閱讀 4466

從使用者的角度來說,當程式出現異常時只要有給點簡單的提示就行.但從開發者的角度來說就需要非常詳細的資訊,這對追蹤bug很有用.異常相關的詳細資訊可以記錄到日誌檔案中.這樣你自己測試時比較方便點,而且做使用者支援時也方便,如果使用者碰到啥問題要他們把錯誤日誌發過來就行.

異常處理語句通常的形式一般如下:

try//some code

catch(exception ex)

我們通常獲取的提示資訊是ex.message,簡單描述了下出現啥異常了.但ex裡面還包括其他些詳細的資訊

ex.gettype().fullname.詳細的異常名字,我們知道exception是比較籠統的,還有些更詳細的異常名字比如system.indexoutofrangeexception

ex.source 返回應用程式的名字

ex.targetsite 返回是出異常的函式的名字

ex.stacktrace 這裡面的資訊比較多,有出錯的函式名字,還有具體是哪一cs原始檔中,並且詳細到源**中哪一行

除了這些資訊外,有些時候可能還想知道版本號,程式執行的作業系統和硬體的相關資訊.因為有時一些bug可能只在某個作業系統中才出現.當然你能用其他方法知道,但通過寫**把這些資訊收集起來更方便.

system.reflection.assembly.getexecutingassembly().getname().version.tostring();//獲取程式的版本號

using system.management;   //先add reference,找到system.mangement,點ok

string msg = string.empty ;

managementobjectsearcher query = new managementobjectsearcher("select   * from win32_operatingsystem");

managementobjectcollection querycollection = query.get();

foreach (managementbaseobject managementobject in querycollection)

msg = managementobject["caption"] +                    //作業系統名字,比如microsoft windows 7 professional

managementobject["version"] +                  //系統版本號,比如6.1.7601

managementobject["manufacturer"] +          //作業系統生產廠商,比如microsoft corporation

managementobject["csname"] +                  //電腦名,這個是自己隨便取的

managementobject["windowsdirectory"];    //系統安裝目錄,比如c:\windows

query = new managementobjectsearcher("select * from win32_computersystem");

querycollection = query.get();

foreach (managementobject managementobject in querycollection)

msg += managementobject["manufacturer"]  +     //電腦廠商,比如dell inc.

managementobject["model"] +                  //型號,比如optiplex 755

managementobject["systemtype"] +        //cpu型別,比如x64-based pc,表示64位的cpu

managementobject["totalphysicalmemory"].tostring() +     //記憶體大小

managementobject["domain"] +               //網域名稱

managementobject["username"] ;            //電腦開機時的使用者名稱;

反正電腦軟硬體相關的很多資訊都可以通過類managementobjectsearcher去檢視,比如硬碟,主機板,網絡卡得一些資訊

使用traceback獲取詳細的異常資訊

try 1 0except exception,e print e輸出結果是integer division or modulo by zero,只知道是報了這個錯,但是卻不知道在哪個檔案哪個函式哪一行報的錯。下面使用traceback模組 import traceback try 1 0excep...

traceback模組 獲取詳細的異常資訊

try 1 0except exception,e print e 輸出結果是integer division or modulo by zero,只知道是報了這個錯,但是卻不知道在哪個檔案哪個函式哪一行報的錯。下面使用traceback模組 import traceback try 1 0exce...

C 獲取檔案詳細備註資訊

專案中引用 shell32.dll using system.io using shell32 shellclass sh new shellclass folder dir sh.namespace path.getdirectoryname strpath folderitem item dir...