当前位置: 首页 > article >正文

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

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


文章目录

  • 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 命令当尝试匹配符号时,此符号选项可降低符号处理程序的挑剔度。官方文档地址:

    • .symopt(设置符号选项) - Windows drivers | Microsoft Learn
    • 符号选项 - Windows drivers | Microsoft Learn
    • SYMOPT_LOAD_ANYTHING

    在这里插入图片描述

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

    • .reload(重新加载模块) - Windows drivers | Microsoft Learn

    在这里插入图片描述

4、相关地址🐐

  • 演示代码
  • .symopt(设置符号选项) - Windows drivers | Microsoft Learn
  • 符号选项 - Windows drivers | Microsoft Learn
  • SYMOPT_LOAD_ANYTHING
  • .reload(重新加载模块) - Windows drivers | Microsoft Learn

http://www.kler.cn/a/397730.html

相关文章:

  • 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
  • springboot接口返回数据给前端,BigDecimal为null但返回前端显示-1
  • MFC中Picture Control控件显示照片的几种方式
  • 微信小程序进行md5加密 ,base64 转码
  • HarmonyOS 开发环境搭建
  • FlinkSql读取kafka数据流的方法(scala)
  • Ubuntu从入门到精通(一)系统安装
  • 使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan
  • css-50 Projects in 50 Days(3)
  • 屏幕拾色器
  • GESP4级考试语法知识(贪心算法(四))
  • 从二维到一维:动态规划矩阵问题的优化之道
  • spring-cache concurrentHashMap 自定义过期时间
  • 将 HTML 转换为 JSX:JSX 和 JSX 规则
  • 【项目开发】分析六种常用软件架构
  • ISCTF2024
  • 算法沉淀一:双指针
  • 【Android Compose原创组件】可拖动滚动条的完美实现
  • 算法:快排(三指针算法)
  • YashanDB 23.2.3安装过程,并使用DBeaver进行连接
  • 【如何获取股票数据47】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深指数历史分时KDJ数据获取实例演示及接口API说明文档
  • windows C#-创建记录类型(下)
  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • mysql数据迁移PolarDB
  • ubuntu安装 Pycharm
  • Prometheus面试内容整理-数据持久化和高可用