初次尝试使用Windbg调试Sql Server 进程
? ? 最近看了呂海波大牛的書,和相關資料;決定嘗試一下使用Windbg調試Sql Server 進程;當然是入門級的;
看了呂海波老師的書終于明白一個道理,原來數據庫系統的內核(內存)中,就是各種鏈表;
?
大牛的相關鏈接在
http://bbs.51cto.com/thread-1085647-1.html
呂海波
調試 Oracle 倡導者 ? ?DTrace/mdb/gdb調試 Oracle 技術推廣者
?
首先用windbg附加到sqlserver進程;
?
關閉windbg,再打開設置符號文件路徑,發現被附加的進程被結束,正在運行中的sqlcmd不能輸入命令了;
?
重新打開,設置符號文件路徑為網上下載;
再附加到sql server 進程;提示沒找到符號文件路徑;
?
lm列出模塊,可列出;
?
查看內存使用情況,看不到;
?
查看內存,顯示的都是問號;
?
查看進程堆,看不到;
?
看peb,看不到;
?
啥情況?不是設置符號文件路徑為網上自動下載,本地找不到會自動往微軟的網站下載么?
想了一下,看來這種高級貨32位和64位差別很大,本機64位,需要使用64位的windbg才行;
?
打開windbg 64位,設置符號文件路徑如下圖,附加到sqlserver進程,可以了;
?
看下內存使用詳情;
?
內存使用中,有的是釋放,有的是內存映射文件,有的是Stack32或Stack64,有的是載入的某個dll使用的;
?
TEB64或TEB32應該是那個線程使用的;
對于這些都不太了解;以后有空再研究吧;
?
查看進程堆,顯示了兩個起始地址;
?
之前在數據庫中用insert into 插入了字符串,看下插入的字符串在內存中能不能搜到;
用s命令搜索字符串,掛了;命令輸錯;一直顯示busy;
?
中斷之;
?
重新輸命令,沒輸對;
根據網上資料,s命令搜索字符串,-u搜unicode,-a搜ascii;
?
?
dv: 不用加內存地址,顯示當前棧上面的所有的變量
不能枚舉,提示需要私有符號;
?
查看一下進程堆,打命令du或da加前面顯示的進程堆地址;
沒東西,空的;
?
?
根據網上資料,可以在windbg中用.shell命令加載一個cmd shell,然后可使用dos的find命令搜索字符串,如下圖的命令;
啥也沒搜到;
先到這里;
?
總結
以上是生活随笔為你收集整理的初次尝试使用Windbg调试Sql Server 进程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解Oracle用户管理
- 下一篇: 详细图解数据库约束