【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);
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值