Windbg调试(使用方法)

2023-05-16

一、Windbg版本信息

Windbg分32位和64位版本,32位程序应使用32位Windbg调试,64位程序应64位Windbg调试。

若想使用64位的Windbg分析32位的程序, 使用如下命令进行CPU模式的切换:

.load wow64exts;!sw

//例如:
1.查看线程停在哪里
~*kb;.load wow64exts;!sw;

二、Windbg调试程序步骤

方法1:File->Open Executable(打开一个.exe可执行文件)->在Windbg窗口执行g(Go);出现如下错误:

ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
ntdll!LdrInitShimEngineDynamic+0x35c:

以Viusal Studio为例,一般发布给客户的程序,我们采用Release模式编译程序,而Release模式与Debug模式,有个很大的区别: Release模式编译出来的程序默认是不带PDB相关信息的,而Debug模式则有.

没有设置符号信息的路径,所以找不到符号。这里所说的符号信息就指上述PDB文件,并且在默认Release模式编译出来的程序,会带有一个同名的PDB文件。你也可以通过配置Visual Studio的配置项来决定是否产生PDB文件: 

项目属性->链接->Debugging->生成debug信息(Generate Debug Info)

方法2:先运行一个.exe->File->attach to a process

三、常用的命令

Processes and thread //找到对应线程号,双击后在local中看内存变量。
~9kv //查看9号线程的内存
linux下QT源文件的编译:
1.进入main.cpp所在的目录,敲入qmake -project 回车,生成***.pro工程文件
2.再敲入qmake ***.pro 回车,生成相关的MakeFile文件(***与目录名有关)

四、各种窗口的使用

1.Command(调试器命令窗口)

调试器命令窗口是windbg中的主要调试信息窗口。可以在此窗口中输入调试程序命令并查看命令输出。Windbg的命令窗口是我们进行调试时,主要打交道的窗口。界面如下:(一般把.exe打开后就会自动出现)

2.Watch(监视窗口)

“监视”窗口显示和更改全局变量、局部变量和寄存器信息。

  • 可以自定义此窗口以显示您正在跟踪的项。
  • 可以显示所需的任何变量列表。
  • 这些变量可以来自任何函数的全局变量和局部变量。
  • 任何时候,“监视”窗口都会显示与当前函数范围匹配的变量值。
  • 可以通过“监视”窗口更改这些变量的值。

在点击go之前:若要将变量添加到监视窗口中,选择第一个空单元格名称列中,键入变量名称,然后按 ENTER。 一个带有感叹号变量从单独的模块名称 ()。 如果未指定模块,则使用当前的模块。

3.Locals(局部变量)

名称列显示每个本地变量的名称,列显示每个变量的当前值。

4.Registers(寄存器窗口)

寄存器窗口包含两个列。 Reg列列出了所有目标处理器的寄存器。 Value列显示每个注册的当前值。 

5.Memory window(内存窗口)

内存窗口显示多个列中的数据。 在窗口的左侧列显示每个行的开始地址。 其余列显示所需的信息,从左到右。 如果选择字节显示格式菜单中,对应于这两个字节的 ASCII 字符将显示在窗口的右侧。

6.Call stack(调用堆栈)

作为一种替代方法 k命令时,您可以调用窗口中查看调用堆栈。通过上面的方式打开call stack窗口。

7.Disassembly(反汇编窗口)

反汇编是指将非汇编目标代码转变成汇编的过程。平常看到的反汇编代码,其实是由C编译器C语言代码直接编译汇编代码的,并非由机器码反汇编成汇编。

反汇编和C代码中都可以设置断点,但调试反汇编可以获得更高的精度,因为一句C代码可能有数十条汇编代码组成,在C代码单步执行一次,可能执行了十几条汇编代码,而在反汇编界面单步调试,每次只执行一句汇编代码。

8.Scratch Pad(便笺薄)

若要在草稿板窗口中键入,单击窗口,然后开始键入的你想要添加的文本。 此外可以使用标准复制和粘贴功能。 草稿板窗口的内容不会影响调试器的操作。 此窗口存在只是为了帮助进行文本编辑。

9.Processes and Threads(进程和线程)

“进程和线程”窗口显示当前正在调试的所有进程的列表。进程中的线程出现在每个进程下。如果调试器附加到多个系统,则系统显示在树的顶层,进程从属于它们,线程从属于进程。

10.Command Browser(命令浏览器)

命令浏览器窗口显示并存储调试器命令的文本结果。此窗口创建命令引用,使您可以查看特定命令的结果,而无需重新输入该命令。命令浏览器窗口还提供了对存储的命令的导航,因此您可以比使用调试器命令窗口更快地访问命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windbg调试(使用方法) 的相关文章

随机推荐

  • Could not find encoder for codec id 27: Encoder not found

    在detectron2测试demo时出现如题所示问题 xff0c 解决 xff1a 改 xff1a fourcc 61 cv2 VideoWriter fourcc 34 x264 34 为 xff1a fourcc 61 cv2 Vide
  • Ubuntu查看磁盘使用情况

    xff08 1 xff09 查看文件大小 查看当前文件夹下所有文件大小 xff08 包括子文件夹 xff09 du sh du h 15M package 16K fontconfig 4 0K cache 5 1M rpmdb 20M 查
  • 最简单的方式解决ubuntu 16.04 屏幕亮度问题

    本教程不需要修改grub xff08 因为我的ubuntu 没有 sys class backlight intel backlight brightness 这个目录 xff09 xff0c 我也装过brightness indicato
  • 按列合并两个.txt 文件

    一颗行走的大白菜 转载请标明出处 网上给出了好多答案 xff0c 动辄几十行的python 脚本让人好烦 xff0c 然后我们的linux仅仅需要一条命令就能解决 xff1a 先给出截图 xff1a 我要合并read txt read1 t
  • python: np.pad() 函数的用法

    在卷积神经网络中 xff0c 为了避免因为卷积运算导致输出图像缩小和图像边缘信息丢失 xff0c 常常采用图像边缘填充技术 xff0c 即在图像四周边缘填充0 xff0c 使得卷积运算后图像大小不会缩小 xff0c 同时也不会丢失边缘和角落
  • matlab 如何使用mex

    MATLAB与C语言混合编程接口 MATLAB是一种解释性语言 xff0c 不需要编译 xff0c 调试比较方便 xff0c 但是缺点是速度慢 这一点在执行复杂的科学算法的时候体现极为明显 而C语言虽然相对比 较复杂 xff0c 但是执行效
  • 关于在终端能到import模块 而在jupyter notebook无法导入的问题

    这个问题让我查了许多天才解决 xff0c 为了避免后面的人重复走弯路 xff0c 记录下来 问题描述 xff1a 我在ubuntu 下编译安装了caffe xff0c 在命令行模式下可以import caffe xff0c 但是在jupyt
  • PCA原理

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net zhongkelee article details 44064401 转载请声明出处 xff1a http blog cs
  • 当表格太大超过一栏时

    表格大小的调整 当表格太大超过一栏时 xff0c 可以调节 首先文章导言区加入 usepackage graphicx 然后在要缩小的位置加入语句 resizebox 0 5 textwidth 要缩小的表格 要注意的是要把待缩小的表格放到
  • 安装了keras,报错 importerror: no module named kears

    原因可能如下 xff1a 你使用的python 默认是2 7 或者是3 6 xff0c 而keras 安装到了python3 5或python 3 6 的路径下 xff0c 此时 xff0c 你需要重新安装keras并指定安装路径 可以测试
  • module.exports、exports和export、export default的区别,import和require的区别

    在vue及其他模块化开发中 xff0c 经常会用到这些输出和引用的语句 xff0c 那么 xff0c 怎么在合适的时候用合适的语句呢 xff0c 怎么区分它们呢 xff1f 一 理论区别 首先 xff0c module exports和ex
  • Linux docker 安装

    先执行wget qO https get docker com sh 命令安装docker 执行该命令可能会出现wget命令找不到的问题 xff0c 那我们就先要执行yum install wget 命令安装wget 安装完后就可以使用wg
  • ITK和VTK比较

    概念比较安装步骤遇到的问题 概念比较 基本概念ITK xff08 Insight Segmentation and Registration Toolkit xff09 VTK xff08 visualization toolkit xff
  • 关于12864液晶屏汉字显示问题

    在我们学习或者开发12864显示屏 xff08 带字库 xff09 的过程中 xff0c 可能大家会遇到我这样的情况 如下 xff1a 第三行的 数学 两字显示不出来 xff1f 而第四行却可以 xff0c 为什么 xff1f 答案显而易见
  • IOS10-IOS13屏蔽系统更新描述文件|去除‘设置’①小红点教程

    大家都知道在iPhone系统更新的时候都会提示咱们进行更新 xff0c 但是有些小伙伴不想更新 xff0c 但是不更新有一个小红点1这样人很烦躁 xff0c 对于强迫症的人实在是忍不了 xff0c 今天我就给大家分享一个方法 xff0c 只
  • iOS13屏蔽系统自动更新,去除①红标,这个文件复活了!

    iPhone手机系统每一次发布新版本 xff0c 大家经常会接收到系统自动推送的升级提示 xff0c 经常会在大家不知情的情况下系统就在后台自动把系统升级包给自动下载下来了 xff0c 经常会弹出一个提示窗提醒升级 xff0c 这对于一些不
  • AC代码

    此处省略一万分AC代码 加油咯 xff01 xff01 xff01 代码还是尽量自己写 xff0c 看别人的博客不是不可以 xff0c 看别人的代码也不是不可以 xff0c 如果你不看比人的博客 xff0c 不看别人的代码 xff0c 不看
  • Oracle group by 扩展函数详解(grouping sets、rollup、cube)

    文章目录 1 概述2 分组函数2 1 group by xff1a 一起分组 xff08 1 xff09 2 2 grouping sets xff1a 单独分组 xff08 N xff09 2 3 rollup xff1a 累计累加 xf
  • Oracle 索引详解(index)

    文章目录 1 概述2 索引管理2 1 创建索引2 2 删除索引2 3 修改索引2 4 查询索引 3 索引类型3 1 B Tree 平衡树索引3 2 bitmap 位图索引3 3 反向键索引3 4 基于函数索引 4 扩展4 1 走不走索引的情
  • Windbg调试(使用方法)

    一 Windbg版本信息 Windbg分32位和64位版本 xff0c 32位程序应使用32位Windbg调试 xff0c 64位程序应64位Windbg调试 若想使用64位的Windbg分析32位的程序 使用如下命令进行CPU模式的切换