VS+QT项目---调试经验输出
1、遇到程序突然崩
(1)程序可能会出现,还没跑起来就崩了、UI输出后一点就崩了、输出图像崩了等情况。
(2)一般选择debug模式进行调试,通过打断点、printf / cout 等打印log,定位问题所在地。
1.1、程序编译中崩了;
a、程序初始化就崩了,从main()函数开始,通过打断点的方式逐步定位;
b、根据定位到大方向,逐步向内定位;
c、可能存在内存泄露、非法引用、未处理的异常、死循环等;
内存泄露:程序在使用动态内存分配函数申请内存空间后,没有及时释放所分配的内存空间,导致内存不断飙升,最终内存不足,导致程序运行崩溃;
非法引用:包括使用未定义的变量或函数,或者试图读取一个不存在的文件,这些都可能导致程序运行崩溃;
1.2、程序使用中崩了;
a、程序设置为debug模式,通过打断点的方式,定位到距离哪里崩了;
b、结合程序前后逻辑,检查输出、调用的值是否为空指针/野指针/重复释放/内存泄露/数组越界/虚表被破坏等;
c、通过打印输出其值和地址,进行对比;
//打印输出内存中的值
void CPubFunc::debugout(const unsigned char * pIn, int inlen)
{
if (!pIn || inlen == 0)
return;
printf("inlen = %d \n ", inlen);
for (int i = 0; i < inlen; i++)
{
printf("%02x ", pIn[i]); //以十六进制进行输出
}
printf("\n");
}
2、奇怪的bug
在程序编译中,总会暴出一些奇怪的错误,比如说qt正常调用的函数,加到vs里面就不行了;添加UDP通信模块功能,程序就报错了等奇奇怪怪的错误,其下是将我遇到的奇怪的报错进行一个记录。
**要相信,答案就在问题里;**
2.1、变量未声明?
遇见用QT正常编译的程序,将其模块,加到VSStudio程序中时,编译中一直显示“未定义的外部符号” 和 “ 未解析的外部符号 ”
原因:
a、函数或变量被声明但未定义。
b、函数或变量定义的位置在编译单元之外,链接器找不到定义。
c、判断,加入后的代码与之前的工程编译格式不同;
解决方法:
a、确保所有声明都有相应的定义。
b、检查定义的位置,确保在需要的编译单元中。
c、将报错的代码用Notepat++打开,Notepat++右下角修改编码格式,保存后项目重新加载;
3、查看程序耗时
auto t0 = GetTickCount();
auto t1 = GetTickCount();
auto t2 = GetTickCount();
printf("CThrdLinkMsg::run cost:%lu,%lu,%lu,%lu,0 \n",t2, t2 - t0, t1 - t0, t2 - t1);