初次尝试使用Windbg调试Sql Server 进程

    最近看了吕海波大牛的书,和相关资料;决定尝试一下使用Windbg调试Sql Server 进程;当然是入门级的;

看了吕海波老师的书终于明白一个道理,原来数据库系统的内核(内存)中,就是各种链表;

 

大牛的相关链接在

http://bbs.51cto.com/thread-1085647-1.html
吕海波
调试 Oracle 倡导者    DTrace/mdb/gdb调试 Oracle 技术推广者
 

首先用windbg附加到sqlserver进程;

初次尝试使用Windbg调试Sql Server 进程_第1张图片

 

关闭windbg,再打开设置符号文件路径,发现被附加的进程被结束,正在运行中的sqlcmd不能输入命令了;

初次尝试使用Windbg调试Sql Server 进程_第2张图片

 

重新打开,设置符号文件路径为网上下载;

再附加到sql server 进程;提示没找到符号文件路径;

初次尝试使用Windbg调试Sql Server 进程_第3张图片

 

lm列出模块,可列出;

初次尝试使用Windbg调试Sql Server 进程_第4张图片

 

查看内存使用情况,看不到;

初次尝试使用Windbg调试Sql Server 进程_第5张图片

 

查看内存,显示的都是问号;

初次尝试使用Windbg调试Sql Server 进程_第6张图片

 

查看进程堆,看不到;

初次尝试使用Windbg调试Sql Server 进程_第7张图片

 

看peb,看不到;

初次尝试使用Windbg调试Sql Server 进程_第8张图片

 

啥情况?不是设置符号文件路径为网上自动下载,本地找不到会自动往微软的网站下载么?

想了一下,看来这种高级货32位和64位差别很大,本机64位,需要使用64位的windbg才行;

 

打开windbg 64位,设置符号文件路径如下图,附加到sqlserver进程,可以了;

初次尝试使用Windbg调试Sql Server 进程_第9张图片

 

初次尝试使用Windbg调试Sql Server 进程_第10张图片

看下内存使用详情;

初次尝试使用Windbg调试Sql Server 进程_第11张图片

 

内存使用中,有的是释放,有的是内存映射文件,有的是Stack32或Stack64,有的是载入的某个dll使用的;

初次尝试使用Windbg调试Sql Server 进程_第12张图片

 

TEB64或TEB32应该是那个线程使用的;

初次尝试使用Windbg调试Sql Server 进程_第13张图片

对于这些都不太了解;以后有空再研究吧;

 

查看进程堆,显示了两个起始地址;

初次尝试使用Windbg调试Sql Server 进程_第14张图片

 

之前在数据库中用insert into 插入了字符串,看下插入的字符串在内存中能不能搜到;

用s命令搜索字符串,挂了;命令输错;一直显示busy;

 

中断之;

初次尝试使用Windbg调试Sql Server 进程_第15张图片

 

重新输命令,没输对;

根据网上资料,s命令搜索字符串,-u搜unicode,-a搜ascii;

初次尝试使用Windbg调试Sql Server 进程_第16张图片

 

初次尝试使用Windbg调试Sql Server 进程_第17张图片

 

dv: 不用加内存地址,显示当前栈上面的所有的变量

不能枚举,提示需要私有符号;

初次尝试使用Windbg调试Sql Server 进程_第18张图片

 

查看一下进程堆,打命令du或da加前面显示的进程堆地址;

没东西,空的;

初次尝试使用Windbg调试Sql Server 进程_第19张图片

 

初次尝试使用Windbg调试Sql Server 进程_第20张图片

 

根据网上资料,可以在windbg中用.shell命令加载一个cmd shell,然后可使用dos的find命令搜索字符串,如下图的命令;

啥也没搜到;

先到这里;

 

你可能感兴趣的:(原创教程,数据库)