BianChengNan's Blog

Coding is hard, you can make it easy!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

调试实战 | 全局变量初始化顺序探究

发表于 2020-05-30 | 更新于: 2024-12-21 | 分类于 调试 , 调试案例
字数统计: | 阅读时长 ≈ 分钟

缘起

我在上一篇文章——《调试实战 | dll 加载失败之全局变量初始化篇》中,跟大家分享了一个由于全局变量初始化顺序导致的 dll 加载失败的例子。感兴趣的小伙伴儿可以点击阅读。

虽然我们知道了是由于全局变量初始化顺序导致的问题,也给出了解决方案。但是有一点却没有刨根问底——为什么改变文件在工程文件中的顺序就可以改变全局变量初始化顺序?是怎么影响的呢?本篇文章力求解决这个问题。

阅读全文 »

调试实战 | dll 加载失败之全局变量初始化篇

发表于 2020-05-23 | 更新于: 2024-12-21 | 分类于 调试 , 调试案例
字数统计: | 阅读时长 ≈ 分钟

前言

最近项目里总是遇到 dll 加载不上的问题,原因各种各样。今天先总结一个虽然不是项目中实际遇到的问题,但是却非常经典的问题。其它几种问题,后续慢慢总结。

示例代码包含一个 exe 工程,两个 dll 工程。 exe 会加载两个 dll 并调用它们的导出函数(GetCallCount),结果只有一个 dll 的导出函数被成功调用。会是什么原因呢?

阅读全文 »

10 个实验搞懂命令提示符

发表于 2020-05-16 | 更新于: 2024-12-21 | 分类于 工具
字数统计: | 阅读时长 ≈ 分钟

前言

相信,很多小伙伴儿都在命令提示符中执行过 ipconfig 查看 ip 信息。我们还可以执行 ping ip 来 ping 对应的 ip 地址,执行 notepad 启动记事本,执行 explorer 启动文件管理器……

但是,你好奇过背后的运作机制吗?为什么输入几个简单的几个字母就能启动外部程序,本文试图通过一系列实验来挖掘其背后的运作机制。

如果你对下面的问题有很明确的答案,本文不是为你准备的。如果有模糊,拿不准的地方,请耐心读完。如果觉得有用,请帮忙点个在看,拜谢。

阅读全文 »

排错实战 | 帮 vs2019 找回丢失的 SDK

发表于 2020-05-10 | 更新于: 2024-12-21 | 分类于 排错
字数统计: | 阅读时长 ≈ 分钟

缘起

前一段时间,有网友遇到一个奇怪的问题,说他机器上的 vs2019 编译 C++ 工程报错。我当时一听就有两个怀疑:

  1. 工程设置不对。
  2. vs2019 没装好。

因为新建一个最简单的工程,编译也报一样的错误,所以可以排除工程设置的问题了。那只有可能是 vs2019 的问题了。但是具体是哪里的问题呢?

阅读全文 »

调试实战 | 从堆里找回“丢失”的代码相关命令简介

发表于 2020-05-01 | 更新于: 2020-05-01 | 分类于 调试实战 , 工具
字数统计: | 阅读时长 ≈ 分钟

前言

在上一篇文章中,我们主要使用了三个命令 !address,s,.writemem 把丢失的代码成功的保存到了文件中。本文简单介绍一下上文用到的这三个命令。

阅读全文 »

调试实战 | 从堆里找回“丢失”的代码

发表于 2020-04-19 | 更新于: 2020-04-19 | 分类于 调试实战 , 工具
字数统计: | 阅读时长 ≈ 分钟

前言

前一阵子,使用小乌龟(TortoiseGit)提交代码的时候,错误的 Revert 了部分代码,本文记录了找回这部分代码的过程。文章标题致敬张银奎老师《格蠹汇编》的第一章 —— 从堆里抢救丢失的博客。

说明: 本文的截图都是我用新建的示例工程截取的。

阅读全文 »

转储系列文章总结

发表于 2020-04-19 | 更新于: 2024-12-21 | 分类于 转储
字数统计: | 阅读时长 ≈ 分钟

前言

本来只想发布一篇使用 livekd 抓取系统转储文件的总结,没想到一下子扩展出了这么多篇。转储系列文章终于告一段落了。今天对转储系列文章做个总结。

阅读全文 »

本地内核调试神器 —— livekd 使用总结

发表于 2020-04-11 | 更新于: 2020-04-11 | 分类于 调试 , 工具
字数统计: | 阅读时长 ≈ 分钟

说明:本文很早就发布在我的博客上了,当时总结的有些问题,本次重新整理完善后再次发布。

前言

有时候我们非常想知道当前系统内核的一些状态,比如查看当前系统加载了哪些驱动,查看某个进程外 COM 调用卡在哪里了,等等。如果我们可以调试系统内核,或者抓取一个系统转储来做事后调试,该多好啊。我们可以通过如下方法得到系统转储:

  1. 双机内核调试(需要另外一台机器来做双机调试)
  2. 让系统崩溃(可以使用 sysinternals中的 notmyfault 或者 使用快捷键让系统崩溃,并设置 系统崩溃的时候自动保存转储文件)(有点小题大作了:joy:)。
  3. 使用 sysinternals 中的 livekd,不需要特殊设置,绿色环保。

以上几种方案中,使用 livekd 最方便快捷。如果有哪位小伙伴儿对其它几种方法感兴趣,可以查看之前的转储系列文章。为了能顺利使用 livekd,我们需要解决几个问题。

阅读全文 »

排错实战 | 解决 c++ 工程编译错: error C2059 'string' illegal token on right side of xxx

发表于 2020-04-04 | 更新于: 2024-12-21 | 分类于 排错
字数统计: | 阅读时长 ≈ 分钟

缘起

最近,项目里出现了一个奇怪的编译错误。乍看错误提示,真有丈二的和尚,摸不着头脑的感觉。解决之后,又是这么的合情合理。具体是什么样的问题呢?一起来看看吧。

阅读全文 »

排错实战 | 善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误

发表于 2020-03-30 | 更新于: 2024-12-21 | 分类于 排错
字数统计: | 阅读时长 ≈ 分钟

前言

相信,绝大多数小伙伴儿编译 C++ 或者其它语言的程序都遇到过编译错误。今天简单总结一下如何使用错误列表(Error List)和输出窗口(Output)排查编译 C++ 代码产生的编译错误。简单的错误,通过错误列表就可以搞定,但是一些复杂的错误,只通过错误列表很可能是无法解决的,需要借助输出窗口的帮助。

阅读全文 »
1…91011…14
BianChengNan

BianChengNan

134 日志
33 分类
221 标签
RSS
GitHub 知乎 博客园
© 2019 — 2024 BianChengNan | 全博客共 字
0%