【C++软件调试技术】使用Windbg分析软件异常时的诸多细节与技巧总结

目录

1、dump文件

1.1、dump文件的生成方式

1.2、dump文件的大小

2、pdb符号文件

2.1、pdb文件的路径设置

2.2、pdb文件的时间戳与名称问题

2.3、如何确定要找哪些pdb文件?

3、使用Windbg静态分析dump文件以及动态调试程序的一般步骤

4、确定发生异常或崩溃的业务模块,到业务模块的函数中去排查

5、在分析从任务管理器中导出的dump文件时可能需要使用.effmach命令切换一下上下文

5.1、操作系统位数与程序位数

5.2、使用.effmach命令将线程上下文切换到32位

6、Windbg动态调试目标进程时遇到因为调用了IsBadWritePtr或者IsBadReadPtr引发的异常

7、什么时候使用Windbg静态分析?什么时候使用Windbg动态调试?

7.1、程序发生死循环或死锁问题时

7.2、程序发生异常,但异常捕获模块没有捕获到

7.3、异常捕获模块感知到了异常,但导出dump文件时产生了二次崩溃,dump文件生成失败

7.4、程序运行过程中检测到不正常,直接调用abort函数强制结束进程,导致程序闪退

7.5、用IDE调试程序时产生异常,但看不到有效的函数调用堆栈,可以尝试使用Windbg进行动态调试

7.6、程序启动崩溃或失败时

7.7、程序弹出报错提示框时

8、有时可能需要使用反汇编工具IDA查看汇编代码上下文去辅助定位问题

9、熟悉Windbg命令

10、最后


C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931

### 可视化 Studio 2022 构建跳过的常见原因及解决方案 #### 原因分析 构建过程被标记为“已跳过”,通常意味着编译器认为项目不需要重新构建,因为源文件自上次成功构建以来未发生任何更改。然而,在某些情况下,这可能是由于配置错误或其他问题引起的。 - **依赖关系解析失败**:如果项目的依赖项未能正确识别,则可能导致构建工具误判无需更新目标文件[^1]。 - **环境变量设置不当**:不正确的路径定义可能妨碍外部库或工具链的调用,进而影响整个工程的状态判断逻辑[^3]。 - **增量构建机制失效**:Visual Studio 使用间戳来决定哪些部分需要重建;当存在多个并行操作,可能会出现竞态条件使得某些变更无法及反映给 IDE 的内部缓存系统[^2]。 #### 解决方案建议 ##### 方法一:强制完全清理重载 执行一次彻底清除可以消除残留数据干扰,确保所有组件都按照最新状态处理: ```batch devenv /clean SolutionName.sln ``` 之后重启 VS 并尝试再次启动完整的 Build 过程。 ##### 方法二:验证平台架构一致性 确认当前工作区所选的目标 CPU 类型(如 x86/x64)同本地机器实际运行模式相匹配,并且第三方插件支持范围一致。 ##### 方法三:调整日志级别获取更多信息 通过修改 `Tools -> Options` 下面关于 MSBuild 输出详细程度选项至诊断级(Diagnostic),以便更深入地排查潜在隐患所在位置。 ##### 方法四:检查全局/用户级别的 NuGet 配置 有包管理器中的异常也会触发此类现象,因此有必要审查 `.nuget/NuGet.Config` 文件以及个人资料夹下的相应设定是否存在冲突之处。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值