BianChengNan's Blog

Coding is hard, you can make it easy!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

排错实战 | 记一次 pugixml 编译错误的解决

发表于 2022-05-29 | 更新于: 2024-12-21 | 分类于 vs
字数统计: | 阅读时长 ≈ 分钟

缘起

前一阵子,平台在换基线,底层接口变了很多,因此引出了至少 20000 个编译错误。在加班改完这些编译错误后,没想到又遇到了一个诡异的编译错误。而且之前还解决过类似的编译错误,但是这次却没能第一时间找出罪魁祸首。一起看看这是一个什么编译错误吧。

阅读全文 »

难说 | 读了几本书

发表于 2022-05-06 | 更新于: 2024-12-21 | 分类于 reading
字数统计: | 阅读时长 ≈ 分钟

前言

好久没在这个号上发表文章了,今天听群友说微信开放了私信功能,赶紧来试试。欢迎私信。

阅读全文 »

调试实战 | 使用 IDA 和 windbg 调试 LNK1123 转换到 COFF 期间失败:文件无效或损坏(下)

发表于 2022-03-27 | 更新于: 2024-12-21 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

前言

在前面两篇文章中(这里,这里)总结了使用 windbg 和 IDA 找出 cvtres.exe 报错的根本原因,并把一些细节问题弄清楚了。但是还剩下一个小细节没有深究 —— 如果启动 cvtres.exe 的时候没有指定全路径,windbg 会报系统找不到指定的文件的错误。当时只是根据经验判断需要使用完整路径,但是为什么只使用文件名不行呢?今天就把这个问题也格尽。

说明: 写完本文,我犹豫了很久要不要发表出来。因为这个问题其实很简单(在设置 PATH 环境变量时,路径多加了双引号)。但是当时的我真的是当局者迷,完全没意识到这个问题,导致花费了很长时间。process monitor,gflag,IDA,windbg,轮番上场,甚至都调试起 windbg 来了(嗯,你没看错,不是用 windbg 调试,而是调试 windbg),好一阵忙活,中间还走了很多弯路(自以为是的在错误的函数中下断)。最后幡然醒悟,原来真理就在那躺着,静静的等着被发现。

之所以决定发出来有几点原因:

  1. 介绍了让进程自动中断到调试器中的方法,甚至是让一个调试器自动中断到另外一个调试器中的方法。
  2. 介绍了只对特定线程设置断点的方法、使用 wt 追踪函数调用的方法等。
  3. 提醒自己,在调试过程中一定要保持清醒的头脑。

没耐心的朋友直接跳到最后即可。

阅读全文 »

难说 | 程序员的品味

发表于 2022-03-21 | 更新于: 2024-12-21 | 分类于 难说
字数统计: | 阅读时长 ≈ 分钟

缘起

代码里有很多值得商榷的写法。今天来发点牢骚。

阅读全文 »

调试实战 | 使用 IDA 和 windbg 调试 LNK1123 转换到 COFF 期间失败:文件无效或损坏(中)

发表于 2022-03-06 | 更新于: 2024-12-21 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

前言

在 上一篇文章 中,我们总结了使用 windbg 和 IDA 找出 cvtres.exe 报错的根本原因,但是留下了几个细节问题。本篇文章就来把这几个细节问题“格”干净。

阅读全文 »

调试实战 | 使用 IDA 和 windbg 调试 LNK1123 转换到 COFF 期间失败:文件无效或损坏(上)

发表于 2022-02-06 | 更新于: 2024-12-21 | 分类于 调试
字数统计: | 阅读时长 ≈ 分钟

缘起

前一段时间在折腾拆分 rc 的问题,已经把遇到的问题整理成文了。感兴趣的小伙伴儿可以参考这里,这里 和 这里。本以为不会有问题了,后续流程就请其它同事帮忙处理了,没想到在拆分实际项目时遇到了一个非常奇怪的链接问题。

本文总结了使用 process monitor 监听进程创建,查看进程参数、使用 gflags 设置 Image File Excution Options、使用 IDA 静态分析相关函数的业务逻辑以及使用 windbg 进行动态调试的整个过程。我认为这是一个由不良的编程习惯与 crt 的限制共同导致的问题。快来一起看看吧。

阅读全文 »

性能优化 | 记一次 .NET 程序的性能优化实战(4)—— .NET 源码查看及使用 vs 调试

发表于 2022-01-16 | 更新于: 2024-12-21 | 分类于 性能优化
字数统计: | 阅读时长 ≈ 分钟

前言

在前面三篇文章中应该已经把 .NET 中正则表达式相关的问题”格尽”了。感兴趣的小伙伴儿可以参考 part1,part2 和 part3。

由于篇幅原因,在前面的文章中并没有介绍如何下载 .NET 源码,如何调试 .NET 源码。本文会简单介绍如何下载 .NET 源码,如何在线浏览 .NET 源码,如何使用 vs 调试 .NET 源码。

阅读全文 »

2022 开工喽

发表于 2022-01-03 | 更新于: 2024-12-21 | 分类于 福利
字数统计: | 阅读时长 ≈ 分钟

回首 2021

2021 年真是又忙又累的一年,一直在加班,清明加,五一加,周末更别提了。一直忙到年底,才真正休息了几天。2021 真的是在忙碌中度过的,好在努力没有白费,付出了不少,也收获了很多:

  • 交付的项目得到了客户的认可。
  • 我们的团队在不断壮大成长。
  • 我们的工作流程在持续优化中。
  • 我们的技术交流依旧在持续举办中。
  • 我们开始 code review 啦。
  • 我们开始全面拥抱 git 啦。
阅读全文 »

性能优化 | 记一次 .NET 程序的性能优化实战(3)—— 深入 .NET 源码

发表于 2021-12-26 | 更新于: 2024-12-21 | 分类于 性能优化
字数统计: | 阅读时长 ≈ 分钟

前言

前两篇文章 part1 和 part2 基本上理清了 IsSplitter() 运行缓慢的原因 —— 在函数内部使用了带 Compile 选项的正则表达式。

但是没想到在 IsSplitter() 内部使用不带 Compiled 选项的正则表达式,整个程序运行起来非常快,跟静态函数版本的运行速度不相上下。又有了如下疑问:

  1. 为什么使用不带 Compiled 选项实例化的 Regex 速度会这么快?
  2. 为什么把 Regex 变量从局部改成全局变量后运行速度有了极大提升?除了避免重复实例化,还有哪些提升?
  3. 为什么 PerfView 收集到的采样数据,大部分发生在 MatchCollections.Count 内部,极少发生在 Regex 的构造函数内部?(使用带 Compiled 选项的正则表达式的时候)
  4. Regex.IsMatch() 是如何使用缓存的?
  5. 直接实例化的 Regex 对象会使用正则表达式引擎内部的缓存吗?
  6. 正则表达式引擎内部根据什么缓存的?
  7. 什么时候会生成动态方法?生成的动态方法是在哪里调用的?

本文会继续使用 Perfview 抓取一些关键数据进行分析,有些疑问需要到 .NET 源码中寻找答案。在查看代码的过程中,发现有些逻辑单纯看源码不太容易理解,于是又调试跟踪了 .NET 中正则表达式相关源码。由于篇幅原因,本篇不会介绍如何下载 .NET 源码,如何调试 .NET 源码的方法。但是会单独写一篇简单的介绍文章 。

阅读全文 »

性能优化 | 记一次 .NET 程序的性能优化实战(2)—— 使用 perfview 找出 Regex 慢的根本原因

发表于 2021-11-29 | 更新于: 2024-12-21 | 分类于 性能优化
字数统计: | 阅读时长 ≈ 分钟

前言

我在上一篇文章《性能优化 | 记一次 .NET 程序的性能优化实战(1)—— 使用 process explorer 快速定位问题代码》中用 process explorer 定位到了导致程序运行缓慢的原因——使用了 .NET 中的正则表达式。.NET 中的正则表达式真这么慢吗?带着疑问,开始了本次的探索之旅。喜欢刨根问底的小伙伴儿快来一起看看吧!

阅读全文 »
1…456…14
BianChengNan

BianChengNan

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