1.dr.watson
是什麼?
dr.watson( drwtsn32.exe)
是windows
自帶的除錯工具
,相比於比較專業的程式除錯工
(windbg,ntsd…)
她顯得比較的弱小
,但是在如下場合她應該是比較好的一種選擇:
a. 在沒有安裝任何除錯工具的測試機器上我們的程式崩潰了
.怎麼辦?是把
windows
彈出來的報錯的對話方塊抓屏發給開發人員看嗎
?說實話那個對話方塊對開發人員來說資訊太少了
,唯一能斷定的是:哦
,這個程式崩潰了.
b. 在終端使用者的機器上
;我們的程式已經發售到了終端使用者手上
,程式崩潰了
,怎麼辦
?問題出在哪?
在這個時候
dr.watson
顯出了她的優勢:她是
windows
自帶的除錯工具
,不需要另外安裝
,而且她能提供給開發人員必要的資訊去確定問題
的所在.
這就是說
dr.watson
能在如下時刻幫助我們:
1. 應用程式崩潰了
(crash); 2.
應用程式遇到了異常
(exception)(注
:產生了異常如果我們採取了一切措施,比如
try-catch機制,
並不會導致崩潰)
2.dr.watson
什麼時候會被執行起來?
如果你的機器上
dr.watson
被設定成預設的除錯工具那麼當你的
windows
中任何程式崩潰的時候
dr.watson
會自動執行
,當然她的執行也許沒有介面
(可以在
dr.watson
介面中設定
),她只是默默的產生了乙個包含錯誤資訊的檔案存放在特定的路徑下
.這時候你要做的也許就是把這個包含錯誤資訊的檔案發給開發人員
.注意我們前面說到的」如果
dr.watson
被設定成預設的除錯工具那麼
….」 也就是說
dr.watson
有可能並不是你機器上的預設的除錯工具
,比如說你安裝了
vc6++
那麼vc6++
就會成為你的預設的除錯工具
….那如何把我們的
dr.watson
妹妹設定成預設的除錯工具呢
??請參看
4.如何把
dr.watson
設定成windows
預設的除錯工具
?另外一種執行
dr.watson
的方式就是在
run(執行)
處輸入drwtsn32
回車.
3.當有程式崩潰的時候
dr.watson
會產生什麼檔案
?存在哪?
dr.watson
產生的drwtson32.log,user.dmp檔案,
其中drwtson32.log
是乙個文字檔案
,大家隨便找乙個
textedit
就可以開啟
,裡面包含的資訊的解釋稍後有詳細的介紹
,user.dmp
檔案是提供給
windbg
之類的稍專業一點的除錯工具用的
,windbg
可以匯入
user.dmp
檔案然後看到崩潰的現場.
檔案的存放位置是可以在
dr.watson
中設定的
,預設的存放位置和
windows
的版本有關係:
4.如何把dr.watson
設定成windows
預設的除錯工具?
start(開始)àrun(執行),輸入」
drwtsn32 –i
」回車,好了
,現在dr.watson
就是你的
windows
的預設的除錯工具了.
5.如何讓
dr.watson
只關心我指定的程式的崩潰情況?
大部分時間我們並不關心別的程式是否崩潰而只是關心我們正在測試/除錯的程式,那我們能否讓dr.watson只記錄我們感興趣的那個程式的崩潰情況呢??
在run(執行)對話方塊中輸入」drwtsn32 -p
processid」你就可以指定dr.watson只除錯指定的程序.
processid是什麼?是程序id
那我怎麼去知道我要除錯的程序的id呢?很簡單:
1.開啟任務管理器(task mamager),選擇view->select columns;
2.然後彈出乙個對話方塊,我們選上 pid那個checkbox;
好了,我們就可以在任務管理器(task mamager)中看到每乙個程序的pid了.
6.解讀dr.watson
產生的drwtson32.log.
因為user.dmp檔案主要是提供給其他除錯工具用的所以我們來看看drwtson32.log檔案裡面都是些什麼東西…. a
. 我們寫乙個簡單的會崩潰的程式(crashdemo.exe)來說明這個檔案包含的資訊:
1. #pragma comment( )指示編譯器為我們產生pdb檔案,關於pdb檔案大家需要的話我會有具體的文件介紹.
2.accessviolation函式產生乙個訪問異常:往0x00000位址寫東西,我沒有任何的try-catch機制所以肯定要引發崩潰的.
b .我們設定一下dr.watson…..run dialog box中輸入」 drwtsn32」,回車
1.因為我們前面的程式編譯產生了pdb檔案所以我們這裡鉤上」dump symbol table」;
2.crash dump type我們鉤上」full」.
c .好,執行一下我們的程式(crashdemo.exe),崩潰了….我們開始解讀drwtsn32.log了…
這正是我們需要的,開啟
drwtsn32.log:(
下面各個片段出現的順序和真實的
drwtson.log
檔案中的順序一樣
)下面這個片斷是我們重點要關心的地方,因為它顯示出了發生崩潰的原因及現場資訊:
根據上面的資訊結合源**我們可以定位產生崩潰的位置和原因;如果沒有源**那我們只能得出這樣的結論: 1.
在源**
outputdebugstring
的呼叫後面的那個函式出現了非法訪問
,它企圖寫內容到
0x00000000; 2.
出錯的指令位於
0x00401063(ip
暫存器的值
),我們可以根據前面的
module list
找到該指令位於哪個模組
(exe,dll…)中.
接下來是」*----> raw stack dump <----*」這個片斷,如果不是察看位址的值我們也許用不到這個片斷.
匯入dmp檔案
建立命名空間 命名空間名字 create tablespace bbsp logging size 50m autoextend on next 50m maxsize 512m extent management local 建立使用者jnbbsp 密碼jnbbsp 命名空間 bbsp creat...
oracle 匯入 dmp檔案
建立使用者 第一步,進入dos下,輸入sqlplus nolog,登陸sqlplus 第二步,已本地管理員身份連線oracle,conn as sysdba 第三步,建立表空間 create tablespace project datafile f oracle project.dbf size ...
oracle匯入dmp檔案
昨天做了個簡單的oracle匯入dmp檔案,現將經驗總結如下 第一,客戶端如果不在伺服器所在的機器上就不具備匯入許可權。要匯入必須在伺服器端用pl sql等客戶端工具或者直接在命令列中匯入。eg imp username psw databaseninstance file d tobeimport...