程序调试和优化
文章平均质量分 60
cwzmb
我爱探索,我相信别人能做到我也能做到!
展开
-
多线程问题
1、UI的多线程问题。 (1)UI线程和工作线程 UI线程:当在某线程中使用窗口操作API时,就会为该线程创建一个UI线程。这UI线程负责把队列消息放到对应的消息队列中,该UI线程无法由用户使用。如: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,原创 2009-01-01 01:00:00 · 426 阅读 · 0 评论 -
程序内存膨胀问题
发现自己公司的程序执行一段时间以后,会内存膨胀。后来利用截取CallStack的方法发现,是1b0b31fd:orinal55中Sleep造成。用Windbg在1b0b31fd设个断点,发现这是MsJet40.dll一个Error处理函数。所以,确定问题应该是SQL语句出错导致。原创 2010-04-21 14:58:00 · 337 阅读 · 0 评论 -
Release版下的问题
1、ASSERT引起的BUG。 如, Release版Search单路播放有问题。(是ASSERT断言导致。因为Release版会把ASSERT断言的表达式去掉,于是"ASSERT(WaitSingleObject(...))"表达式被删除,导致程序没有等待播放器结束又开始播放。)2、变量未初始化导致的BUG。 如,计算Stretch板卡视频帧时间时,有两个变量,原创 2009-12-30 15:52:00 · 202 阅读 · 0 评论 -
断电导致的BUG
1、断电导致的BUG——程序无法启动,甚至连WINMAIN函数都没有执行。原因:DBGHEL.DLL被损坏。解决方案:(1)重启。 (2)拷贝正确的DBGHEL.DLL。 解决该类问题,可以参考以下转载文章。 设有一个Win32下的可执行文件MyApp.exe,这是一个Win32应用程序,符合标准的PE格式。MyApp.exe的主要原创 2010-01-26 11:12:00 · 269 阅读 · 0 评论 -
CRT检测内存泄漏技巧以及注意问题
用CRT检测内存泄漏的技巧:(1)使用以下宏来对某CPP文件的内存泄漏进行检测。VC2005:#ifdef _DEBUG#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif或VC6#ifdef _DEBUG#define new DEB原创 2009-11-24 15:46:00 · 445 阅读 · 0 评论 -
Manifest使用经验
关于VC2005的一个变态的问题。目前在多个地方被这个问题困扰:a、采用MFC Shared DLL方式编译出来的程序拷贝到测试部门会出现问题。所以只能采用静态DLL方式,但这导致 DLL变得太大。b、内存泄漏、溢出检测时,需要使用MSVCR80.dll的函数,但是采用LoadLibrary的方式也会出现这个问题。 这个问题是:程序报R60原创 2009-11-18 11:30:00 · 1696 阅读 · 0 评论 -
虚拟内存应用
虚拟内存的重要性体现在下面几个方面:1、虚拟内存可以映射到硬盘,以达到扩展内存的作用, 这样系统在物理内存已经用满的情况下,就不会因为没有内存可用, 而导致系统崩溃。2、虚拟内存是以进程空间为寻址空间的,一般情况,进程用户模式下的寻址空间 是2G,为了避免内存的碎片,可以把2G进程空间划分为若干个块,对于长度分配 一样的内存处于同一个块,这样就因为原创 2009-06-16 21:42:00 · 254 阅读 · 0 评论 -
H264视频数据多路播放大内存分配问题
问题描述:现在因为H264本身的原因,一路需要维护30帧的YUV数据(因为一个I帧循环30帧。) 为了避免当这30帧数据播放完后,程序会卡的问题,其实需要2个30帧的YUV数据(一个当缓冲), 也就是60帧YUV数据。那一路(D1)总共的最大内存为:720×576×1.5 × 60 = 36M,因为要求16 路同时播放,因此需要36 × 16 = 576M。可见分配如此大的原创 2009-06-16 16:54:00 · 556 阅读 · 0 评论 -
Rational Quanlity使用体验
1、源码级性能统计。(1)实现源码级性能统计,首先必须在Line模式下,才能使用Annotated Source,然后就可以使用右键->switch to->Annotated Source跳转到函数对应的Source code。 (2)在“(1)”的基础上,当然还需配置对应的PDB以及Source code。首先,必须在Selected Modules中选择对应的模块。例如,如果要调原创 2009-06-11 23:38:00 · 257 阅读 · 0 评论 -
计算代码运行时间
代码执行时间的计算在以下场合需要用到:1、代码出现运行瓶颈,需要找到瓶颈所在。2、程序运行一段时间以后变慢,需要找到变慢的代码。 出于以上目的,你或许可以使用代码时间测试工具(如Rational Quantify)。但,这些工具可能运行速度太慢,让你心烦。而且,Release给客户的程序,有时会出现以上问题,这时你不可能还用Rational Quantify来运行程序。原创 2009-08-19 20:04:00 · 1202 阅读 · 0 评论 -
怎么正常结束多媒体定时器
怎么正常结束多媒体定时器。一、采用TIME_CALLBACK_EVENT_SET。#define PLAYERTICK_Hclass _DS_EXT_DVRBASE_CLASS CTickUser{ public: CTickUser(); virtual ~CTickUser(); void SetSpeed(int nSpeed); void SetMiniSecs(int nMinise原创 2009-05-27 17:00:00 · 520 阅读 · 1 评论 -
线程使用率监控
有时候需要知道进程各个线程的CPU使用率,以平衡这些线程。那怎么知道线程的CPU使用率呢?以下是本人编写的类:#ifndef _WZ_THREADCONTROL_H#define _WZ_THREADCONTROL_H struct ThreadInfo{ char szThreadName[15]; HANDLE hThread; int nPercentCPUUsag原创 2009-04-23 10:46:00 · 736 阅读 · 0 评论 -
try catch
下面情况只能try catch,而不用if else.一、如fun(){ fun1();}fun1(){ fun2();}fun2(){ fun3();}fun4(){ }fun执行了一个连贯动作,如果此时在fun4出现错误,整个连贯动作应立即取消,用if else的话,需逐层返回,灵活性很差。用try catch马上可以跳到fun函数的catch中,原创 2009-03-23 15:36:00 · 612 阅读 · 0 评论 -
FREfast使用
转载:C++代码静态分析工具-Prefast <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/r转载 2008-12-28 00:11:00 · 341 阅读 · 0 评论 -
BoundsChecker使用
转载:http://www.cnitblog.com/qiuyangzh/archive/2005/07/14/975.html1 前言我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsCh原创 2008-12-12 23:48:00 · 16297 阅读 · 7 评论 -
Rational Purify使用
下面的代码集中显示了上述问题的典型例子: 1 #INCLUDE 2 USING NAMESPACE STD; 3 INT MAIN(){ 4 CHAR* STR1="FOUR"; 5 CHAR* STR2=NEW CHAR[4]; //NOT ENOUGH SPACE 6 CHAR* STR3=STR2; 7 COUT1、 COM: COM API/INTERFACE FAILURE CO原创 2008-12-11 14:00:00 · 823 阅读 · 0 评论 -
rational rose & rational purify & rational quanlity 安装
1、下载Rational suite,包括:b-irscd1, b-irscd2, b-irscd3。2、下载Rose破解包rose2003crack(包括flexlm,license.dat,lmgrd.exe, rational.exe)。3、下载合适的shw32.dll。4、安装Rose。注意:rose2003.exe安装程序解压后不要运行C:/Program Files/原创 2008-12-10 15:44:00 · 3248 阅读 · 6 评论 -
调试和优化随笔
1.发现Assert断言出错,此时知道被断言的指针值为NULL,怎么知道到底在哪给它赋NULL呢?(1)用VC->breakpoint->data->enter the expression... 注意:如果出现cannot set break point...,必须先调试进入表达式变量所在类或函数,再编辑。 但是对于频繁改变的变量,调试速度会很慢,这种方法行不通,怎么办呢?(2)在原创 2008-12-06 11:20:00 · 2247 阅读 · 0 评论 -
一个崭新的内存泄漏检测方法
一个崭新的内存泄漏检测方法原创 2010-09-30 16:06:00 · 346 阅读 · 0 评论