C++(Qt)软件调试---无法校验pdb时间戳(23)

C++(Qt)软件调试---无法校验pdb时间戳(23)


### 文章目录

  • [C++(Qt)软件调试---无法校验pdb时间戳(23)](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
  • [@[toc]](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
  • [1、概述🐜](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
  • [2、前期准备🪲](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
  • [3、开始分析🦧](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
  • [4、相关地址🐐](#文章目录 C++(Qt)软件调试---无法校验pdb时间戳(23) @[toc] 1、概述🐜 2、前期准备🪲 3、开始分析🦧 4、相关地址🐐)
更多精彩内容
👉内容导航 👈
👉C++软件调试 👈

1、概述🐜

windows中使用windbg调试程序时需要使用到源代码、可执行程序、pdb符号表;

而加载pdb符号表时有可能会失败,常见原因有两种:

  • 名称错误:pdb符号表和可执行程序名称应该是相同的,如果随意改动会加载失败;
  • 时间戳错误:加载pdb符号表时会校验pdb与exe的生成时间戳是否相同,如果不同也会失败,报错WARNING: Unable to verify timestamp for TestCrash_1.1.0.exe

本文中主要讲解pdb时间戳校验失败如何加载。

演示环境:

  • 系统:

    • Windows11
  • 开发环境:

    • Qt
  • 编译器:

    • msvc2022-64

2、前期准备🪲

  • 演示代码
  • 使用debug模式编译第一次,将生成的pdb符号表复制到其他地方;
  • 使用debug模式编译第二次,将第一次生成的pdb符号表替换第二次生成的符号表,这样pdb和exe时间就不会相同了。
  • 运行TestCrash程序,生成dmp文件。

3、开始分析🦧

  1. 将生成的pdb文件拖进windbg中;

  2. 使用.sympath+ E:\test\bin64命令设置pdb符号表路径;

  3. 使用lm命令查看pdb符号表加载情况,如下图所示未加载;

  4. 使用.reload /f Test*命令加载TestCrash_1.1.0.exe的符号表,显示信息如下,加载失败,校验时间戳错误;

  5. 打开Call Stack窗口;

  6. 输入.excr命令显示与当前异常关联的上下文记录,发现因为没有加载符号表,无法定位异常位置;

  7. 方法一: 使用.symopt+ 0x40 命令++当尝试匹配符号时,此符号选项可降低符号处理程序的挑剔度++。官方文档地址:

  8. 方法二: 使用 .reload /i TestCrash_1.1.0.exe命令,其中/i忽略 .pdb 文件版本中的不匹配情况。TestCrash_1.1.0.exe为需要加载的可执行程序名称。然后再次运行.excr就可以进行分析了,官方文档地址:

4、相关地址🐐

相关推荐
sam-zy2 分钟前
MFC用List Control 和Picture控件实现界面切换效果
c++·mfc
froginwe1115 分钟前
PostgreSQL表达式的类型
开发语言
委婉待续18 分钟前
java抽奖系统(八)
java·开发语言·状态模式
deja vu水中芭蕾20 分钟前
嵌入式C面试
c语言·开发语言
爱码小白21 分钟前
PyQt5 学习方法之悟道
开发语言·qt·学习方法
aaasssdddd9623 分钟前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
发呆小天才O.oᯅ29 分钟前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn
西猫雷婶40 分钟前
python学opencv|读取图像(十六)修改HSV图像HSV值
开发语言·python·opencv
weixin_537590451 小时前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
lsx2024061 小时前
MVC 发布
开发语言