0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术WinCE平台下通过系统异常信息定位程序bug位置

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-17 11:14 次阅读

在程序开发时,时常会遇到异常报错的情况。有时因为环境因素,通过调试工具很难在调试时复现故障情况,或者很难在短时间内复现故障情况。随着工程代码量的增加,定位程序出错位置变得更加困难。

在使用基于WINCE平台的英创系列工控主板进行应用程序开发时,当程序产生异常退出,CE操作系统将通过调试串口打印类似如下错误信息。根据这些信息,结合应用程序对应的map文件,就能够快速定位程序异常的位置,本文将详细介绍这一方法。

准备工作

以一个简单的控制台程序test_exception.exe为例,模拟会产生异常的程序,代码如下。

#include 'stdafx.h'
#include 'windows.h'
#include 'commctrl.h'

void testErr(char* pbuf, int len)
{
*(pbuf+len) = len;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i;
char* p = 0;
char buf[10];
for (i=0; i< 10;i++)
{
printf('i=%d\n',i);
testErr(buf, i);
Sleep(1000);
}
printf('test err\n');
Sleep(1000);
testErr(p, 10);
for (;;)
{
printf('.');
Sleep(1000);
}
return 0;
}

这段代码有个非常明显的致命错误,char* p = 0;实际上是定义的是p的地址为0,之后testErr(p, 10);函数对p地址的操作会造成指针越界,程序将产生异常结束。

设置工程属性

首先需要设置工程属性,让工程编译时产生MAP文件。

另外还可以选择添加汇编输出信息。

这样我们在重新编译程序后,就可以在编译目录里找到源文件的.map和.cod两种调试辅助文件。

记录DEBUG信息

连接英创主板的调试串口至PC主机的串口,打开串口工具(英创主板默认的调试串口参数为115200,8-N-1),以监听DEBUG口打印信息。

运行test_exception程序,记录DEBUG口打印的异常信息。

主要记录出错的exe(或者dll)名test_exception.exe,PC地址00011024,和RA地址000110bc。

查看map文件

查找PC地址00011024,和RA地址000110bc附近的信息。

对照PC地址能够知道,testErr函数的地址00011000,这个函数地址偏移00011024-00011000的地方出错了。

对照RA地址能够知道,最后一次调用该函数未出错时的位置,在wmain函数地址偏移000110bc -00011034的地方。

这样,我们不但知道了是哪个函数出的错,也知道了在哪里调用出的错。

查看cod文件

为了进一步确定范围,打开编译目录下对应的cod文件test_exception.cod。

查看testErr函数信息,可以知道,在偏移地址00011024-00011000=00024的地方的汇编,以及出错的C代码,为test_exception.cpp第10行的*(pbuf+len) = len;

查看wmain函数信息,可以知道,返回地址000110bc -00011034=00088,最后一次正常调用testErr的地方是在test_exception.cpp第22行。

定位错误

这样稍加分析,我们就可以确定出错位置了。

最后,可以在代码附近添加打印或日志log记录,来验证异常位置判断是否正确。

需要例程可以联系英创工程师。

如果产生异常提示信息的不是用户程序,而是'coredll.dll',则判定为是驱动出错,请联系英创工程师检查出错原因。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3435

    浏览量

    87123
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6063

    浏览量

    34596
收藏 人收藏

    评论

    相关推荐

    基于物联网、大数据、云计算等现代信息技术高速公路智慧消防平台解决方案

    安科瑞 程瑜 系统简介 1、概述 智慧消防云平台基于物联网、大数据、云计算等现代信息技术,将分散的火灾自动报警设备、电气火灾监控设备、智慧烟感探测器、智慧消防用水等设备连接形成网络,并对这些设备
    的头像 发表于 03-15 14:20 162次阅读
    基于物联网、大数据、云计算等现代<b class='flag-5'>信息技术</b>高速公路智慧消防<b class='flag-5'>平台</b>解决方案

    手机定位技术之卫星定位和移动基站定位

    GPS 是一种通过卫星信号来确定接收设备位置定位技术。手机内置的 GPS 芯片可以接收来自卫星的信号,通过计算接收时间和卫星
    的头像 发表于 02-26 15:19 1084次阅读
    手机<b class='flag-5'>定位</b><b class='flag-5'>技术</b>之卫星<b class='flag-5'>定位</b>和移动基站<b class='flag-5'>定位</b>

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例<b class='flag-5'>程序</b>固件<b class='flag-5'>信息技术</b>

    针对资产定位及资产追踪的可视化仓储系统

    导航系统通过接收来自卫星的信号来确定接收器的位置。它是目前常用的定位技术之一,具有高精度和广域覆盖的特点。使用GPS
    的头像 发表于 12-27 11:05 232次阅读
    针对资产<b class='flag-5'>定位</b>及资产追踪的可视化仓储<b class='flag-5'>系统</b>

    嵌入式开发为什么需要输出调试信息

    作用: 1.错误排查与问题定位 输出调试信息可以帮助你在代码中发现和定位错误。当程序出现异常行为或崩溃时,
    发表于 11-28 16:46

    HarmonyOS位置服务开发指南

    调用该模块的 API 接口,完成位置信息的获取。 位置服务简介 位置系统使用多种定位技术提供服
    发表于 11-27 16:02

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    集成电路是现代电子信息技术的基础

    集成电路是现代电子信息技术的基础 随着科技的不断发展,集成电路技术已成为现代电子信息技术的基础之一。它的应用范围已经涉及到电子、通信、计算机、军事等行业,已经为人们的生活和工作带来了极大的便利
    的头像 发表于 08-29 16:25 1256次阅读

    信息技术促使轨道交通全面升级

    有别于传统的铁公路系统,新型基础建设强调的是将新一代的信息技术纳入基建领域,在未来的交通系统中,智能化、信息化的轨道交通系统网络,搭配5G等
    的头像 发表于 08-21 11:11 461次阅读

    监察机关楼宇人员的融合定位系统

    监察机关人员融合定位系统是基于 UWB定位技术,并融合了移动互联网、物联网、大数据等信息技术,实现对监察机关工作人员的
    的头像 发表于 08-16 13:57 233次阅读
    监察机关楼宇人员的融合<b class='flag-5'>定位</b><b class='flag-5'>系统</b>

    信息是个啥?

    信息
    橙群微电子
    发布于 :2023年07月24日 09:21:15

    2023年中海达星推官系列直播再度启航,与您一起探讨空间信息技术

    信息技术
    中海达
    发布于 :2023年06月21日 11:45:49

    专访广州智方科技创始人聂佩林--谈室内空间信息技术发展

    。 发展室内地图信息技术最初的想法源自于GPS技术在室内无法覆盖的痛点。为了解决室内导航的问题,人们开始研究室内空间信息技术。这项技术依靠Wi-Fi、蓝牙等信号来实现室内
    的头像 发表于 05-30 11:59 429次阅读
    专访广州智方科技创始人聂佩林--谈室内空间<b class='flag-5'>信息技术</b>发展

    怎么解决通过air724ug获取位置信息通过mqtt发送到云端遇到的问题

    我想通过air724ug模块获取定位后,在通过mqtt发送到云端,但是查询了位置信息之后mqtt就断了 我是通过串口发送AT指令来获取
    发表于 04-27 11:41