
C++相关
文章平均质量分 68
dvlinker
2022年度博客之星Top5、优快云博客专家、B站优质视频教程创作者、C/C++领域优质创作者、优质技术专栏《C++软件调试与异常排查从入门到精通系列教程》作者。从事C++软件开发十多年,通过数年的软件开发实践,积累了大量的实战经验,特别在C++软件调试及异常排查方面积累了丰富的经验,现任C++高级软件工程师!
展开
-
C++栈回溯原理(C++异常排查面试题)
我们在使用VS调试源代码或使用Windbg调试exe程序时,遇到异常,调试器就会中断下来,然后就能查看到此刻的函数调用堆栈。软件是执行到某一句机器代码产生了异常,可以看成执行了某一句汇编代码产生了异常,通过一句汇编代码,是如何将所在线程此刻完整的函数调用堆栈给回溯进来的呢?下面我们就来讲讲栈回溯的原理。 要搞清楚栈回溯的原理,需要对照着函数调用时的栈分布情况来看:1、函数入口处的汇编代码 对照着上图,看一下函数入口的ebp和esp寄存器操作。...............原创 2021-10-27 21:27:11 · 7329 阅读 · 3 评论 -
VC 编程技巧 (一)
VC 编程技巧 (一)原创 2010-11-08 21:12:00 · 1969 阅读 · 3 评论 -
VC 编程技巧 (二)
VC 编程技巧 (二)原创 2010-11-08 21:26:00 · 1269 阅读 · 1 评论 -
VC 编程技巧 (三)
VC 编程技巧 (三)原创 2010-11-08 21:44:00 · 1455 阅读 · 1 评论 -
VC 编程技巧 (四)
VC 编程技巧 (四)原创 2010-11-08 21:58:00 · 1529 阅读 · 1 评论 -
VC 编程技巧 (五)
VC 编程技巧 (五)原创 2010-11-08 22:12:00 · 1716 阅读 · 1 评论 -
VC 编程技巧 (六)
VC 编程技巧 (六)原创 2010-11-08 22:19:00 · 2008 阅读 · 3 评论 -
C++递归调用过多导致的栈溢出问题说明
今天在排查一个导致程序奔溃的bug,经调试发现其中的原因:代码中使用到CTreeCtrl树控件,控件中有上千个节点,代码中为实现相关的应用,需要递归遍历整个树控件,从而导致栈溢出的问题。 那么过多的递归调用为什么会引起栈溢出呢?事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后的结束点后函数才能依次退出,而未到达最后的结束点之前,原创 2012-05-29 22:55:22 · 16195 阅读 · 1 评论 -
C++字体的字号与LOGFONT结构体中的lfHeight、 CHARFORMAT中的yHeight的关系
在调用CFontDialog打开的字体设置对话框中,或者在WORD等Office软件中,设置的字号,其实不是文字的高度(文字在竖直方向上的高度,即占用的像素值),文字的高度比字号数字略大。 1、与LOGFONT结构体中的lfHeight之间的关系 LOGFONT结构体中的lfHeight的高度实际上就是文字的实际高度,那么我们在使用 LOGFONT结构体创建字体原创 2014-01-25 22:03:02 · 9324 阅读 · 3 评论 -
C++ STL中的map表的使用问题
1、map表的插入与数据更新问题 当map表中已经有了某个key值,如果我们再向里面插入同样的key值,我们理所当然的认为,如果Key值存在则更新数据。经测试发现,这种看法是错误的,如果key值存在则会返回失败,不会更新对应的数据。那如何想map表中插入和更新数据呢?应该是要先判断key值是否存在,不存在则Insert插入,存在则Update数据值,相关代码如下所示(用模版实现更原创 2014-02-27 23:34:28 · 3435 阅读 · 0 评论 -
用VS ATL工程开发播放Gif图片控件的步骤
1 创建解决方案创建一个空的解决方案,名称GifSolution。将来包含控件项目和测试项目。2 创建ATL项目解决方案视图-右击解决方案-添加-新建项目,弹出的对话框中选ATL项目,名称为GifAnimate确定。弹出的对话框中选择DLL服务器(可选允许合并代理存根,这样不会产生代理dll),完成后编译,这样工程框架就完成了。3 添加新组件3.1 一点要说明的原创 2014-04-20 10:49:25 · 2259 阅读 · 0 评论 -
如何让MFC窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息
如何让窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息原创 2012-06-09 21:13:24 · 9118 阅读 · 2 评论 -
Windows非公开API函数的调用办法
Windows非公开API函数的调用办法。原创 2012-06-12 22:54:06 · 11782 阅读 · 4 评论 -
C++程序桌面及开始菜单快捷方式图标的更新
C++程序桌面及开始菜单快捷方式图标的更新。原创 2012-07-03 13:05:47 · 3057 阅读 · 1 评论 -
win7中,VC6编译的程序中出现的COleDropTarget和WM_DROPFILES相冲突的问题
COleDropTarget:主要用于实现窗口对拖拽操作的支持,只要在目标窗口中定义COleDropTarget的成员变量,然后调用一下COleDropTarget::Register()函数将目标窗口注册一下就可以使窗口执行拖放操作了。 WM_DROPFILES:主要实现对从资源管理器中将文件拖放到窗口中的响应,主要便于实现文件传输相关功能。在窗口调用AcceptFiles(T原创 2013-03-10 15:19:40 · 2680 阅读 · 0 评论 -
关于Unicode下名称排序问题
一直都有这样的需求: 要将列表中的元素按照名称进行排序,顺序大概是:数字-》字母-》中文,中文则要按照汉语拼音来排序。 之前的程序一直在非Unicode下面运行,使用stl中的sort函数结合strcmp来处理即可实现排序。后面我们的程序进行了Unicode改造,strcmp只适用于ASCII窄字节字符的处理,宽字节则无能为力了。经搜索发现,微软给我们提供了支持原创 2013-12-16 21:52:46 · 3988 阅读 · 0 评论 -
关于Gif图片播放控件的几点说明
1、该控件主要作为一个OLE对象嵌入到RichEdit中使用,不仅仅要支持Gif,还要支持jpg原创 2014-04-20 11:21:15 · 2032 阅读 · 0 评论 -
C++新手经常容易范的两个错误(数组和指针的问题)
1、当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢? 记得刚毕业的那会,经常会遇到这样的笔试题:当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢?即定义了一定长数组,然后将该数组名作为一个参数调用了一个函数,在该被调用的函数中,对该参数进行sizeof操作,如下所示:[cpp] view plaincopy原创 2014-04-22 22:54:15 · 1157 阅读 · 0 评论 -
使用reverse_iterator迭代器实现STL容器的反向遍历
某些时候因为一些特殊的原创 2014-11-05 21:57:44 · 3136 阅读 · 0 评论