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、相关地址🐐

相关推荐
kimnoic8 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
别动我齐刘海9 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
程序员老陆9 小时前
C++ std::promise深度解析
c++·程序设计
必须得开心呀9 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
青少儿编程课堂10 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
沫璃染墨11 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子66612 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
道尔柯南12 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀12 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana212 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法