上位机调试记录之Debug Assertion Failed!

2024-01-14 20:38

本文主要是介绍上位机调试记录之Debug Assertion Failed!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Bug现象还原

使用Debug模式调试USB上位机时,出现了下方错误提示,使用Release模式却不会出现!

2.问题定位

将下方代码进行屏蔽后,错误提示消失

Display_data_512x8bit(data);

data_receive_512x8bit +=_T("USB接收端点无数据输出!\r\n");

UpdateData(false);

可以猜测变量data_receive_512x8bit是引起报错的原因

void CUSBprojDlg:: Creat_file(UCHAR * data,bool success)
{CString str;LONG nLen=512;CTime t=CTime::GetCurrentTime();if(success){str=t.Format(_T("D:\\USB_file_recevie\\file_%Y%m%d%H%M%S.hex")); mFile.Open(str,CFile::modeWrite|CFile::modeCreate);         //打开文件mFile.SetLength(0);                                          //清空文件mFile.SeekToEnd();mFile.Write(data,nLen);	mFile.Flush();//强制将缓冲区数据写入磁盘文件						mFile.Close();//关闭文件//Display_data_512x8bit(data);str=t.Format(_T("Saved to file_%Y%m%d%H%M%S.hex"));SetDlgItemText(IDC_DATAIN,str);	 }else{//data_receive_512x8bit +=_T("USB接收端点无数据输出!\r\n");SetDlgItemText(IDC_DATAIN,_T("请先向FPGA发送数据!"));//UpdateData(false);}
}

data_receive_512x8bit为一CString全局Public变量,用于显示接收的512字节数据,与之相关的代码如下,在界面显示时使用UpdateData(false)来刷新。

CString data_receive_512x8bit;DDX_Text(pDX, IDC_data_receive_display, data_receive_512x8bit);data_receive_512x8bit +=_T("USB接收端点无数据输出!\r\n");
SetDlgItemText(IDC_DATAIN,_T("请先向FPGA发送数据!"));
UpdateData(false);
void CUSBprojDlg::Display_data_512x8bit(UCHAR * data_512)
{int i=0;int j=0;int line=1;CString str=_T("512x8bit data receive from USB: \r\nline00:  ");CString tmp_str=_T("");for(i=0;i<512;i++){tmp_str.Format(_T("%02X"),data_512[i]);tmp_str+=_T(" ");str+=tmp_str;if((j!=0)&&(j!=511)&&((j+1)%16==0)) {str+=_T(" \r\n");tmp_str.Format(_T("line%02d:  "),line);str+=tmp_str;line++;}j++;}data_receive_512x8bit =str;data_receive_512x8bit +=_T(" \r\n \r\n");UpdateData(false);
}

3. 解决思路

去掉全局变量data_receive_512x8bit,直接使用函数SetDlgItemTextW()对文本控件IDC_data_receive_display进行操作,

代码修改方法如下:

SetDlgItemTextW(IDC_data_receive_display,data_receive_512x8bit);
void CUSBprojDlg::Display_data_512x8bit(UCHAR * data_512)
{int i=0;int j=0;int line=1;CTime t=CTime::GetCurrentTime();CString str=_T("512x8bit data receive from USB: \r\nline00:  ");CString tmp_str=_T("");for(i=0;i<512;i++){tmp_str.Format(_T("%02X "),data_512[i]);	str+=tmp_str;if((j!=0)&&(j!=511)&&((j+1)%16==0)) {str+=_T(" \r\n");tmp_str.Format(_T("line%02d:  "),line);str+=tmp_str;line++;}j++;}data_receive_512x8bit =str;data_receive_512x8bit +=_T(" \r\n \r\n");data_receive_512x8bit +=t.Format(_T("Saved to D:\\USB_file_recevie\\file_%Y%m%d%H%M%S.hex!\r\n"));SetDlgItemTextW(IDC_data_receive_display,data_receive_512x8bit);  
}

4. 参考:

[1] File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp的子窗口初始化问题 - xiaoshengforever的专栏 - CSDN博客
https://blog.csdn.net/xiaoshengforever/article/details/11882027

这篇关于上位机调试记录之Debug Assertion Failed!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606441

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode