最近看了吕海波大牛的书,和相关资料;决定尝试一下使用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命令搜索字符串,如下图的命令;
啥也没搜到;
先到这里;