应用程序状态监测系统实现

    在嵌入式系统运行过程中,应用程序运行状态(如变量值、方法调用、程序控制流等),是我们开发人员经常需要关注的,在调试过程中我们经常通过添加打印并运行程序去了解程序的运行状态,这样效率很低且在有些很难复现的问题调试中更难实施,因此,一种动态查看应用程序运行状态的系统,大多数情况能很快定位到问题出错位置,提高调试效率。
   本文通过实现动态查看模块调试信息和动态设置打印等级的控制命令,用户进入shell输入相应命令,可在程序中打印出各个模块运行信息,在设备出现相关问题时,通过查看各模块状态信息或使用自定义的其他功能,能快速定位到目前问题出错位置,从而提高问题解决效率。

系统实现说明

   本系统包含两个模块,包括DSP模块动态监视和DSP打印等级控制两部分。DSP模块动态监视功能:用于在设备程序运行时,用户可在shell输入指定命令,DSP系统根据命令执行相应功能,由子模块内部自定义功能,本框架只负责获取并识别用户输入命令并判断子模块是否支持,支持则将命令下发到子模块,由各子模块进行处理;DSP打印等级控制:可动态设置打印等级,防止DSP打印过多影响其他同事调试。

C/S架构实现

1 socket基本原理

简单介绍下socket原理,这个网上一大把,随便搜一个讲的都比我好。
shell命令识别模块通过socket TCP网络编程实现。简单介绍下socket通信原理:
1、在服务端建立一个ServerSocket,绑定相应的端口,并且在指定的端口进行侦听,等待客户端的连接;
2、客户端创建连接Socket并且向服务端发送请求;
3、服务器收到请求,并且接受客户端的请求信息。一旦接收到客户端的连接请求后,会创建一个链接socket,用来与客户端的socket进行通信。通过相应的输入/输出流(write/read)进行数据的交换,数据的发送接收(recv/send)以及数据的响应等等;
4、当客户端和服务端通信完毕后,需要分别关闭socket,结束通信。
具体接口流程如下图所示。

应用程序状态监测系统实现_第1张图片

2 Cleint/Server功能实现

由于本模块客户端和服务端都只会在单个主机上运行,因此为提高效率,本模块使用本地套接字AF_UNIX,程序会在设备固定路径下创建socket套接字文件,用于进程间通信。
客户端代码单独实现,主要实现功能如下:
1、 获取用户输入命令;
2、 识别判断用户输入命令服务端程序是否支持;
3、 支持则将用户输入命令发送到服务端,否则与服务端断开连接;
4、 如服务端处理出错会发送来出错信息,接收并打印出错信息。
服务端代码集成在嵌入式应用程序代码中,在应用程序初始化时会创建服务端线程,等待客户端连接,主要实现功能:
1、 向客户端提供程序模块所支持的功能列表;
2、 接收客户端发来的待处理命令;
3、 解析待处理命令,检测命令所属子模块,将命令发送到相应子模块,后续由子模块进行处理;
4、 如处理出错则向客户端发送出错信息。
客户端/服务器功能实现及交互流程如下图所示:
应用程序状态监测系统实现_第2张图片

你可能感兴趣的:(c语言)