gflags 工具使用小记

Windows下,调试MySQL一个内存被破坏的bug,.

构造最小重现用例,执行,出现问题,用调试器查看,查看代码,不得其解.

于是使用gflags工具(非google的那个开源的处理命令行参数的库),用法可参考:

1 官方文档:  https://msdn.microsoft.com/en-us/library/ff549557.aspx

2 网友博客:  http://www.cnblogs.com/cswuyg/archive/2011/09/27/gflags.html

如以上资料所述,执行:

1 命令行执行: "gflags /p /enable mysqld.exe /full /unaligned",

2 然后重新启动MySQL的服务器,因mysqld.exe被监测,弹出一个窗口提示可能存在内存问题, 属于启动阶段,非bug所示处,忽略,让程序继续运行. 注意:个过程很快,几乎没有时间损耗.

3 执行测试用例,问题重现,但gflags工具没有给出有用的提示.没有定位到问题所在.

4 放弃使用gflags,禁止其监测mysqld.执行: "gflags /p /disable mysqld.exe"

5 重新启动MySQL的服务器mysqld.exe. mysqld很长时间没有反应,似乎停滞了

6 打开Windows的"任务管理器->进程",看到mysqld进程存在,但"内存"一列的数字在不断增长,说明操作系统在为此进程不断分配内存. 这表明mysqld没有死掉.但是速度缓慢实在无法忍受.

7 执行"regedit"打开注册表,去除"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/Image File Execution Options"项.

8 重新执行第五步,mysqld很快启动,内存分配瞬间完成.

9 返回头重新阅读代码,整理其逻辑关系.发现问题并解决之--异常情况下多次释放对象造成内存错误,非gflags所能捕获之错误(非本篇小记主题,不表).

10 小结: 使用gflags特别注意第七步,除了第四步放弃监控外,还要注意注册表的清理才能完全做到进程监控的失效.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值