Welcome

首页 / 软件开发 / C语言 / C语言中程序时序问题的排查过程

C语言中程序时序问题的排查过程2015-01-20对于由多个模块协同工作的软件来说,程序处理的时序是非常重要的。当消息处理的顺序出现混乱时,程序就会出现异常。

本文基于作者的实际项目经验,对软件模块之间的时序问题进行了详细的分析,为相关软件问题的分析及解决提供了有益的参考。

一、问题描述

在某软件版本中,有两个模块(模块A与模块B)之间要进行通信。通信链路建立起来之后,模块A向模块B发消息,消息中携带了用户号码及序列号。在消息发送成功之后,模块A按照序列号将用户号码存放到一个全局变量中。

模块B在接收到模块A发的消息之后,解析出用户号码,并进行相关的处理。在处理完成之后,模块B将用户号码及序列号原样返回给模块A。模块A先根据接收到的序列号来查找原发送的用户号码,并与接收到的模块B返回的用户号码进行比较。若用户号码相同,则进行后续处理。

模块A与模块B之间的通信如图1所示。

图1 模块A与模块B之间的通信

在该软件版本进行自测的过程中,发现模块A发送的用户号码与模块B返回的用户号码不能匹配,故后续流程无法继续。

查看模块A的日志,打印的发送的用户号码和接收的用户号码是一样的,序列号也是相同的,但在用strncmp函数(用户号码变量为字符串类型)进行比较时就出现了问题。

二、模块A的程序执行流程

由于用户号码的比较是在模块A中完成的,因此这里主要关注模块A的程序执行流程。

模块A的程序执行流程如图2所示:

图2 模块A的程序执行流程

从图2可以看出,在模块A与模块B的消息交互过程中,时序显得非常的重要。如果消息的处理顺序没有定义好,就会出现模块A程序异常终止的情况。