少有人走的路少有人走的路

  • 首页

WinDbg 入门一:(用户模式),调试记事本

勇哥注:

最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。

用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。

如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。

因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模式.net程序上。


这第一篇我就摘炒一下微软的在线文章,不过操作截图我都会自己来过。


WinDbg 是包含在 Windows 调试工具中的内核模式和用户模式调试器。 在此,我们将提供实践练习,这些练习帮助你开始使用 WinDbg 作为用户模式调试器。

有关如何获取 Windows 调试工具的信息,请参见  Windows 调试工具(WinDbg、KD、CDB、NTSD)。

安装调试工具后,找到 64 位 (x64) 和 32 位 (x86) 版本工具的安装目录。 例如:

  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

  • C:\Program Files (x86)\Windows Kits\10\Debuggers\x86

启动记事本并附加 WinDbg

  1. 导航到安装目录,然后打开 WinDbg.exe。

  2. 在“文件”菜单上,选择“打开可执行文件” 。

    在“打开可执行文件”对话框中,导航到包含 notepad.exe 的文件夹(通常是 C:\Windows\System32)。 输入 notepad.exe 作为“文件名称” 。 选择“打开”。


image.png

(图1) 


图1是勇哥win10电脑上,打了win10sdk补丁后的windbg 64位版本,奇怪的是微软文章中的windbg是图2这样的。

也许是执行目录下另有一个exe。

image.png

(图2)





3. 在 WinDbg 窗口底部的命令行中,输入以下命令:

.sympath srv*

输出类似于以下内容:

image.png

(图3)


符号搜索路径指示 WinDbg 查找符号 (PDB) 文件的位置。 调试器需要符号文件来获取有关代码模块的信息(函数名、变量名等)。

输入此命令,它会通知 WinDbg 进行符号文件的初始查找和加载:

.reload

image.png

(图4)

4.  若要查看 Notepad.exe 模块的符号,请输入以下命令:

x notepad!*

image.png

(图5)


注意 如果没有看到任何输出,请再次输入  .reload。

若要查看 Notepad.exe 模块中包含 main 的符号,请使用如下所示 检查符号命令来列出与掩码匹配的模块:

x notepad!wWin*

输出类似于以下内容:


image.png

(图6)



5. 若要在 notepad!wWinMain 处设置断点,输入以下命令:

bu notepad!wWinMain

若要验证是否已设置断点,请输入以下命令:

bl

输出类似于以下内容:

image.png

(图7) 

bu下断点,bl查看所有断点,然后两个超链接: Disable禁用断用, Clear清除断点



6. 若要启动记事本运行,请输入以下命令:

g

记事本将一直运行,直到进入“WinMain”函数,然后中断到调试器 。


image.png

(图8)

命中上一步我们下的断点WinMain


若要查看在记事本进程中加载的代码模块列表,请输入以下命令:

lm

输出类似于以下内容:

image.png

(图9)

貌似是notepad用到的一些dll


若要查看堆栈跟踪,请输入以下命令:

k

输出类似于以下内容:

image.png

(图10)


7. 若要再次启动记事本运行,请输入以下命令:

g

image.png

(图11)

勇哥按了两次g,notepad跑起来了,这时候windbg的状态显示busy, 无法输入指令了。


8. 若要中断记事本,请从“文件”菜单中选择“中断” 。

image.png

(图12)

break指令后,windbg又可以输入指令了。


9. 若要在 ZwWriteFile 设置并验证断点,请输入以下命令 :

bu ntdll!ZwWriteFile

bl

image.png

(图13)

这里是想在记事本保存文件时断下来,因此要对记事本用到的ntdll模块下断点。


10. 输入  g 重新启动记事本。 在“记事本”窗口中,输入一些文本并从“文件”菜单中选择“保存”。 

当遇到 ZwCreateFile 时,正在运行的代码会中断 。 输入  k 以查看堆栈跟踪。

image.png

(图14)输入g重启记事本,然后输入文字,“保存”


image.png

(图15) 已经命中了断点

image.png

(图16)跟踪显示堆栈信息

在 WinDbg 窗口的命令行左侧,注意处理器和线程号。 在本例中,当前处理器号为 0,当前线程号为 11。 因此,我们正在查看线程 11 的堆栈跟踪(它正好在处理器 0 上运行)。


实验到这里,发现windgb状态显示busy,无法输入后面的指令。

菜单中胡乱点几下,windbg的ui失去响应。只能重启windbg再继续后面的第 11条验证。


11. 若要查看记事本进程中所有线程的列表,请输入以下命令(波形符):

~

输出类似于以下内容:

image.png

(图17)

在本例中有 8个线程,索引为 0-7。

Unfrozen应该是线程的状态,非冻结?

这里跟微软文章中说的线程数量不一样(他演示时有14个线程),也许是大家敲入~时记事本的状态不同造成的吧?


12. 若要查看线程 0 的堆栈跟踪,请输入以下命令:

~0s

k

输出类似于以下内容:


image.png

(图18)切换线程

这一步是需要时间的,看到状态栏显示busy就耐心等待吧。


image.png

(图19)显示跟踪堆栈

这一步也需要时间等待。


那么问题来了?显示这个堆栈信息有什毛用处呢?

我也不知道,等下一篇我们一起继续扫盲吧!




--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论: 取消回复

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
登录 注册
搜索
«    2024年5月     »
123 45
6 7 89101112
13141516171819
20212223242526
2728293031
网站分类
  • .net程序调试
  • 系统架构师
  • Remoting
  • 消息队列
  • WCF
  • C#高级话题
  • 本站原创视频/图文教程
  • 自定义控件
  • 本站原创软件与资源
  • OSGI.NET
  • Workflow
  • 杂七杂八的文章
  • 网页自动化技术
  • c++/QT/MFC
  • 机器人/手眼标定
  • 理财知识
  • 视觉实验
  • netMarketing类库说明档
  • 电气与3D图
  • OpenCV
  • 数据库
  • Matlab
  • C#/.net框架
  • C# 异步编程
  • C# TPL
  • C#事件与委托
  • python
  • 工业视觉/halcon
  • 面向对象/设计原则/设计模式/代码重构
  • 安卓、IOS、Xamarin 开发
  • 版本控制
  • 哲学与人生
  • PLC和单片机技术
  • VisionPro
  • 行业软硬件
  • 行业算法与知识
  • 行业新闻与工作经验
  • WPF
  • 生活记事本
  • 分类器、神经网络、深度学习
  • 工业相机镜头选型
  • halcon标定
  • 凌云视觉软件
  • SciSmtCam
  • VisionMaster
  • 3d视觉/点云
  • 运动控制
  • Xamarin和MAUI
标签列表
    网络营销软件技术 Winform技术 C#相关 机器学习 halcon 视觉 版本控制 netMarketing类库 行业文摘与算法 PLC技术 视觉标定 OMRON欧姆龙PLC 工作经验 Epson机器人 理财知识 机器人视觉标定 图形学基础 三角函数 矩阵 机器人视觉 OpenCV C++ Qt Workflow 分类器
最新留言
  • 感谢支持!
  • 赞赞赞,感谢勇哥!
  • 能否分享一下源码,感激不尽!
  • 多个视觉窗体和多个视觉处理流程如34.35行那样做了关联 ,为什么只显示到最后一个窗体
  • 没有图片吗??
  • 你告诉我什么叫做垃圾
  • 就纯纯贴图呗就这还发个啥呵呵
  • 呵呵
  • 你好,我按照你的文章操作,得不到想要的效果?x和Y数值都有偏移,请问是不是要加上X和Y的偏移数值?
  • 这篇文章halcon代码写的厉害, 比halcon的demo更丰富
    热门文章 | 热评文章 | 随机文章
    • halcon引擎学习笔记(一)执行hdev程序

      halcon引擎学习笔记(一)执行hdev程序

    • 基于visual c#.net的虚拟PLC仿真软件开发

      基于visual c#.net的虚拟PLC仿真软件开发

    • Halcon学习(1)读取多张图片

      Halcon学习(1)读取多张图片

    • 运动控制中的PWM和PSO 命令

      运动控制中的PWM和PSO 命令

    • 深入理解MVC

      深入理解MVC

  • vs2022的MAUI框架的hello world

    vs2022的MAUI框架的hello world

  • vs2022 创建maui应用程序,调试windows machine,没出界面,直接退出,请问是什么问题

    vs2022 创建maui应用程序,调试windows machine,没出界面,直接退出,请问是什么问题

  • Halcon学习(1)读取多张图片

    Halcon学习(1)读取多张图片

  • C#高级话题:特性 attribute

    C#高级话题:特性 attribute

  • Lua做为内嵌脚本调用halcon算子

    Lua做为内嵌脚本调用halcon算子

文章归档
  • 2024年5月 (6)
  • 2024年4月 (13)
  • 2024年3月 (19)
  • 2024年2月 (7)
  • 2024年1月 (6)
  • 2023年12月 (20)
  • 2023年11月 (30)
  • 2023年10月 (3)
  • 2023年9月 (1)
  • 2023年8月 (8)
  • 2023年7月 (3)
  • 2023年6月 (2)
  • 2023年5月 (3)
  • 2023年4月 (1)
  • 2023年3月 (10)
  • 2023年2月 (35)
  • 2023年1月 (8)
  • 2022年12月 (66)
  • 2022年11月 (52)
  • 2022年10月 (11)
  • 2022年8月 (7)
  • 2022年7月 (10)
  • 2022年6月 (18)
  • 2022年5月 (4)
  • 2022年4月 (6)
  • 2022年3月 (2)
  • 2021年10月 (4)
  • 2021年9月 (27)
  • 2021年8月 (2)
  • 2021年7月 (60)
  • 2021年6月 (15)
  • 2021年5月 (11)
  • 2021年4月 (3)
  • 2021年3月 (12)
  • 2021年2月 (23)
  • 2021年1月 (38)
  • 2020年12月 (69)
  • 2020年11月 (88)
  • 2020年10月 (50)
  • 2020年9月 (9)
  • 2020年8月 (17)
  • 2020年7月 (42)
  • 2020年6月 (65)
  • 2020年5月 (59)
  • 2020年4月 (88)
  • 2020年3月 (79)
  • 2020年2月 (144)
  • 2020年1月 (42)
  • 2019年12月 (82)
  • 2019年11月 (122)
  • 2019年10月 (34)
  • 2019年9月 (13)
  • 2019年8月 (16)
  • 2019年7月 (47)
  • 2019年6月 (2)
  • 2019年5月 (17)
  • 2019年4月 (46)
  • 2019年3月 (59)
  • 2019年2月 (12)
  • 2019年1月 (25)
  • 2018年12月 (41)
  • 2018年11月 (78)
  • 2018年10月 (81)
  • 2018年9月 (28)
  • 2018年8月 (13)
  • 2018年7月 (75)
  • 2018年6月 (37)
  • 2018年5月 (1)
  • 2018年4月 (1)
友情链接
  • Z-Blog on Github
  • Z-Blog主机
  • 猪悟能的博客
  • 精易论坛
  • 易语言论坛
  • Halcon学习网
  • 51Halcon机器视觉
  • IHalcon
  • github
  • gitee
  • nuget
  • 清华大学开源软件镜像站
  • halcon算子在线查询
  • OpenCV API在线查询
  • 微软在线文档:C#开发指南
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864

两个鬼故事永恒之塔采集尚公主门店起名男起名楚辞女起名关于诗经的张子涵属狗的女宝宝起名名字五行免费起名字影视业公司起名好看的种马小说起宝宝取名网出生男孩起名事业单位年度考核个人总结未出生婴儿起名实况足球2002鼠孩子起名大全武汉教育电视台在线直播观看网球大满贯冰封王座开公司起名字大全免费门市起名大全2017最新版的中美将举行通话给儿童起乳名男孩医疗器械公司昵称起名大全日记一天一篇琉璃免费观看全集在线家纺店起名字吗混乱武林v再战江湖代购系统烘焙店起名氏程起名女孩子少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化