本文档适用于已熟悉SylixOS并且使用RealEvo-IDE进行开发调试的技术工程师。
SylixOS 实现了一个功能强大的调试stub,可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件。
按照调试对象的不同,调试手段可分为以下几类:
1. 应用程序调试(App工程)
2. 动态库调试(SharedLib工程)
3. BSP调试(BSP工程)
4. 内核调试(KernelModule)
按照调试环境的不同,调试手段又可细分为以下几类:
1. 一键推送调试
2. 手动启动调试
3. 串口调试
4. Attach 到进程调试
5. 多线程调试(Non-stop模式)
6. 条件断点调试
RealEvo-IDE集成开发环境沿用了eclipse的界面风格和使用习惯,因此在调试步骤上兼容eclipse调试方法。
本文主要以应用程序(App)调试为例,详细介绍RealEvo-IDE常用调试手段,并简单介绍动态库调试、BSP调试和内核调试的应用场景。
RealEvo-IDE 调试设置界面如图 3-1所示。在此界面可以配置不同的调试手段。
图3-1 调试设置界面
应用程序SylixOS APP工程是ReadEvo-IDE调试中最常见的调试对象。调试应用程序依赖的 libvpmpdm.so(进程补丁)必须是 Debug 版本,否则将会因为 Release 版本的libvpmpdm.so 没有调试信息导致未知的错误,这个问题会在所有被调试应用程序链接的动态库(如:libcextern 等) 上出现。
调试程序如程序清单 3-1 所示。
程序清单3-1 调试程序
#include <stdio.h> int main (int argc, char **argv) { int iCount = 1; int i; for(i = 0; i < 500; i++) { printf("%d.Hello SylixOS!\n", iCount); iCount++; sleep(1); } return (0); }
根据“《RealEvo-IDE使用手册》5.1节 一键推送调试”步骤,进入到调试界面,如图 32所示。
图3-2 调试界面
在工具栏“Window”→“Show View”界面可以调出变量监控、汇编指令等辅助调试的窗口。
手动启动调试方法与一键推送调试方法仅仅是在调试步骤上有些区别,其目的都是让需要调试的程序进入debug模式,方便一步步定位bug的位置。两种调试方法都依赖于以太网接口。
具体调试步骤请参考《RealEvo-IDE使用手册》5.2节 手动启动调试。
对于不支持以太网接口的设备,可以使用串口进行手动启动调试。
具体调试步骤请参考《RealEvo-IDE使用手册》5.3节 通过串口调试。
当程序正在运行时(程序可能已运行了很久)出现了严重错误(程序并没有因为这个错误而停止),这个时候由于程序不能停止,我们就需要一种特殊方法来发现程序运行中存在的问题。Attach调试是一种能够对正在运行的程序进行调试的方法。
具体调试步骤请参考《RealEvo-IDE使用手册》5.5节 Attach到进程调试。
调试多线程程序时,如果某个线程停在一个断点上,调试器会让整个程序挂起,直到你这个线程恢复运行,程序中的其他线程才会继续运行。这个限制使得被调试的程序不能够像真实环境中那样运行——当某个线程断在一个断点上,让其他线程并行运行。Non-stop模式下的程序调试保证了一个线程停在断点出,不会影响其它线程的并发运行。
具体调试步骤请参考《RealEvo-IDE使用手册》5.6节 Non-stop模式。
当对程序bug已定位到是发生在一个循环当中,只在循环遍历了若干次以后,才会出现,
或者定位到程序中某个变量为一个特定的值,才会出现,而这个变量的值是在程序运行的过程中随机设置的。这个时候,条件断点调试方法会方便程序员迅速准确定位bug位置。
以程序清单 31为例,仅保留“iCount++”语句处的断点,操作步骤如图 33所示,可进行断点的条件设置。
图3-3 条件断点调试
动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,动态库可以在内存中被几个应用程序进程所共享,因此应用程序代码体积较小。这也是动态库被广泛使用的原因之一,SylixOS支持动态库开发和调试。
具体调试步骤请参考《RealEvo-IDE使用手册》5.4节 动态库调试。
SylixOS BSP即板级支持包工程,板级支持包中一般包含SylixOS在某个特有的硬件平台上运行所必须的驱动和初始化程序。
具体调试步骤请参考《RealEvo-Simulator使用手册》2.8节 新建调试。
《RealEvo-IDE使用手册》
《RealEvo-QtSylixOS使用手册》
《SylixOS应用开发手册》
原文地址:http://gedongrui.blog.51cto.com/12548092/1905776