CN103019935A - 基于Windows消息机制的软件调试方法 - Google Patents
基于Windows消息机制的软件调试方法 Download PDFInfo
- Publication number
- CN103019935A CN103019935A CN2012105153894A CN201210515389A CN103019935A CN 103019935 A CN103019935 A CN 103019935A CN 2012105153894 A CN2012105153894 A CN 2012105153894A CN 201210515389 A CN201210515389 A CN 201210515389A CN 103019935 A CN103019935 A CN 103019935A
- Authority
- CN
- China
- Prior art keywords
- message
- program
- debugged
- debugging
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于Windows消息机制的软件调试方法,步骤1在待调试程序中插入调试信息;步骤2启动待调试程序调用调试信息,经Window消息队列将消息发送至信息调试器;步骤3启动信息调试器;步骤4直接运行待调试程序,测试需要获取调试信息的部分;步骤5关闭待调试程序;步骤6激活信息调试器显示调试信息;步骤7分析待调试程序存在的问题;步骤8修改待调试程序的相关代码;步骤9重复步骤4到步骤8的工作,直到待调试程序的所有代码调试结束。本方法在独立窗口显示所有的调试信息,在待调试程序崩溃时仍能保留程序的运行信息记录,适用于大型多模块多线程复杂软件系统的单元调试、整体调试等过程。
Description
技术领域
本发明涉及Windows消息机制领域,特别是一种基于Windows消息机制的软件调试的方法。
背景技术
调试程序是软件编写过程中极为重要的一个环节。在调试程序时,通常会使用AfxMessageBox()弹出消息框来显示调试信息。这种方式虽然方便,但会打断待调试程序的运行。另外,若消息框侵占了待调试程序的窗口画面,一旦消息框结束,系统会对待调试程序的窗口发出原本不必要的WM_PAINT消息, 同时OnDraw()或OnPaint()函数会被调用,使得调试程序整个过程变得繁琐,运用起来很不方便。如果消息框正是放在OnDraw()或OnPaint()两个函数中,程序调试就会陷入死循环中。
发明内容
本发明的目的是提供一种基于Windows消息机制的软件调试方法,要解决背景技术中存在的调试程序时遇到的技术问题,特别是调试程序过程中如何不干扰被调试程序的窗口画面问题。
为实现上述目的,本发明采用如下技术方案:
一种基于Windows消息机制的软件调试方法,步骤如下:
步骤1:在待调试程序中需要调试的代码行插入一个调试信息;所述待调试程序为消息发送端
步骤2:启动待调试程序,调用步骤1中插入的调试信息,经Window消息队列将消息发送至信息调试器;
步骤3:启动信息调试器,所述信息调试器为消息接收端;
步骤4:直接运行待调试程序,测试需要获取调试信息的部分;
步骤5:关闭待调试程序;
步骤6:激活信息调试器,用于显示待调试程序运行过程中发送来的调试信息;
步骤7:根据上述记录的信息,分析待调试程序存在的问题;
步骤8:根据上述待调试程序存在的问题,修改待调试程序的相关代码;
步骤9:重复步骤4到步骤8的工作,直到待调试程序的所有代码调试结束。
所述调试信息是一个全局函数,上述全局函数的代码是固定不变的,直接插入待调试程序后调用即可;
所述Window消息队列采用Windows的 WM_COPYDATA消息实现消息发送端和消息接收端之间的通信。
所述信息调试器是一个可执行文件,用于显示、保存、删除收到的调试信息内容及收到调试信息内容时间;将上述调试信息的内容保存为文本文件并通过窗口界面显示。
所述消息发送端和消息接收端通过Window消息队列传递调试信息;所述待调试程序经Window消息队列发送消息至信息调试器,所述Window消息队列,用于将消息发送至信息调试器中,所述信息调试器,用于分析并显示调试信息,并通过Window消息队列查询消息信息
与现有技术相比本发明具有以下特点和有益效果:
本发明针对使用AfxMessageBox()显示调试信息的不足,改进了显示调试信息的方法,既能方便的调试程序,又不影响程序的执行,特别是调试程序过程中不会干扰到待调试程序的窗口画面。
本发明可以在独立窗口显示所有的调试信息,在待调试程序崩溃时仍能保留待调试程序的运行信息记录,适用于大型多模块多线程复杂软件系统的单元调试、整体调试等过程,能应用于基于Win32API的Windows平台下的软件开发过程中,为程序的调试提供了极大的方便。
附图说明
下面结合附图对本发明做进一步详细的说明。
图1是本发明的调试方法的使用流程图。
图2是本发明的信息调试器模块示意图。
图3是本发明的消息发送端与消息接收端之间通信的程序流程图。
图4是本发明的消息接收端界面窗口图。
图5是本发明的保存调试信息的文本文件窗口图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实例,并参照附图,对本发明进一步详细说明。
参见图1所示,这种基于Windows消息机制的软件调试方法,步骤如下:
步骤1:在待调试程序中需要调试的代码行插入一个调试信息;所述待调试程序为消息发送端;所述调试信息是一个全局函数,可以方便的插入到任何需要调试的程序中,上述全局函数的代码是固定不变的,直接插入待调试程序后调用即可;所述调试信息都可以设定一个消息ID号,该消息ID号是一个范围在–32768 到 32767之间的整数,可根据需要任意设定,用来标定不同代码行发送的消息或对调试信息进行分类区别,便于在信息调试器中对消息进行检索。
步骤2:启动待调试程序,调用步骤1中插入的调试信息,经Window消息队列将消息发送至信息调试器;所述Window消息队列采用Windows的 WM_COPYDATA消息实现消息发送端和消息接收端之间的通信传递。
步骤3:启动信息调试器,所述信息调试器为消息接收端;所述信息调试器是一个可执行文件,具有窗口界面,能将收到的调试信息的内容和收到调试信息的时间以列表的形式显示出来,并具有删除或保存记录,并将上述调试信息的内容保存为文本文件等功能。
步骤4:直接运行待调试程序,测试需要获取调试信息的部分;
步骤5:关闭待调试程序;
步骤6:激活信息调试器,用于显示待调试程序运行过程中发送来的调试信息;
步骤7:根据上述记录的信息,分析待调试程序存在的问题;
步骤8:根据上述待调试程序存在的问题,修改待调试程序的相关代码;
步骤9:重复步骤4到步骤8的工作,直到待调试程序的所有代码调试结束。
参见图2所示,本发明的信息调试器模块示意图,所述消息发送端和消息接收端通过Window消息队列传递调试信息;所述待调试程序经Window消息队列发送消息至信息调试器,所述Window消息队列,用于将消息发送至信息调试器中,所述信息调试器,用于分析并显示调试信息,并通过Window消息队列查询消息信息。
参见图4消息接收端界面窗口图和图5所示保存调试信息的文本文件窗口图,本发明针对使用AfxMessageBox()显示调试信息的不足,改进了显示调试信息的方法,既能方便的进行调试程序,又不影响待调试程序的执行。更重要的是,它不会干扰到程序的窗口画面。在独立窗口显示所有的调试信息,在待调试程序崩溃时仍能保留程序的运行信息记录,适用于大型多模块多线程复杂软件系统的单元调试、整体调试等过程,能应用于基于Win32API的Windows平台下的软件开发过程中,为程序的调试提供了极大的方便,对软件编写的效率也有相应的提高。
参见图3所示消息发送端与消息接收端之间通信的程序流程图。通过Windows的 WM_COPYDATA 消息在不同的进程之间传递信息,由独立于待调试程序的进程来记录所有的调试信息,使待调试程序可以流畅的运行。
在消息发送端,进行一些其他操作后,在需要进行调试的待调试程序中加入一个调试信息,用于向消息接收端发送信息,该调试信息就是一个函数,函数代码如下:
void SendTraceMessage( DWORD dwID, CString strTracerInfo )
{
HWND pWnd = ::FindWindow( NULL, "调试信息记录器" );
if ( pWnd == NULL )
return;
COPYDATASTRUCT stData;
stData.dwData = dwID;
stData.cbData = strTracerInfo.GetLength()+1;
stData.lpData = strTracerInfo.GetBuffer(stData.cbData);
::SendMessage( pWnd, WM_COPYDATA, 0, (LPARAM)&stData );
}
在需要显示调试信息的代码行调用插入的函数SendTraceMessage,调试信息作为该函数的入口参数,例如:
void Func_Example()
{
int nReturn = XYZ(); //需要观察 nReturn的值
//向调试器发消息开始
CString str;
int nID = 1; //此消息ID号可任意设定,用于标定不同代码行发送的消息或消息分类
str.Format("nReturn = %d", nReturn);
SendTraceMessage(nID, str);
//向调试器发消息结束
CString strReturn = ABC(); //需要观察 strReturn 的值
//向调试器发消息开始
nID = 2;
SendTraceMessage(nID, strReturn);
//向调试器发消息结束
}
打开信息接收端,即调试信息记录器.exe;初始化,设置列表框的风格和栏目标题等;直接运行待调试软件,测试需要获取调试信息的部分;在信息接收端的窗口观察信息列表框,里面列出了待调试程序运行过程中发送来的调试信息;消息接收端判断是否收到WM_COPYDATA消息;收到WM_COPYDATA消息,进行解析信息并显示;没有收到WM_COPYDATA消息,则进一步判断对话框大小是否改变,对话框大小改变,则按照对话框的新尺寸调整列表框的尺寸;若对话框的大小未改变,则触发单行删除按钮,删除选中的行信息;否则触发清空按钮,清空所有信息;否则触发保存按钮,保存现有信息;否则触发退出按钮,则程序结束,否则重新判断是否收到WM_COPYDATA消息。;根据调试信息,修改待调试程序的相关行的相关代码;重复上述步骤直到待调试程序的所有代码调试结束;如有需要,可以在消息接收端删除指定的调试信息,也可以全体清除,还可以将调试信息保存为文本文件。
以上所述实施方式,仅为本发明较有代表性的具体实施方式,但本发明所保护技术方案并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可从本发明公开的内容直接导出或轻易想到的所有变化或替换,都应涵盖在本发明的保护范围之内。
Claims (5)
1.一种基于Windows消息机制的软件调试方法,其特征在于步骤如下:
步骤1:在待调试程序中需要调试的代码行插入一个调试信息;所述待调试程序为消息发送端
步骤2:启动待调试程序,调用步骤1中插入的调试信息,经Window消息队列将消息发送至信息调试器;
步骤3:启动信息调试器,所述信息调试器为消息接收端;
步骤4:直接运行待调试程序,测试需要获取调试信息的部分;
步骤5:关闭待调试程序;
步骤6:激活信息调试器,用于显示待调试程序运行过程中发送来的调试信息;
步骤7:根据上述记录的信息,分析待调试程序存在的问题;
步骤8:根据上述待调试程序存在的问题,修改待调试程序的相关代码;
步骤9:重复步骤4到步骤8的工作,直到待调试程序的所有代码调试结束。
2.根据权利要求1所述的基于Windows消息机制的软件调试方法,其特征在于:所述调试信息是一个全局函数,上述全局函数的代码是固定不变的,直接插入待调试程序后调用即可;所述调试信息的消息ID号是任意设定的,用于标定不同代码行发送的消息或消息分类。
3.根据权利要求1所述的基于Windows消息机制的软件调试方法,其特征在于:所述Window消息队列采用Windows的 WM_COPYDATA消息实现消息发送端和消息接收端之间的通信。
4.根据权利要求1所述的基于Windows消息机制的软件调试方法,其特征在于:所述信息调试器是一个可执行文件,用于显示、保存、删除收到的调试信息内容及收到调试信息内容时间;将上述调试信息的内容保存为文本文件并通过窗口界面显示。
5.根据权利要求1所述的基于Windows消息机制的软件调试方法,其特征在于:所述消息发送端和消息接收端通过Window消息队列传递调试信息;所述待调试程序经Window消息队列发送消息至信息调试器,所述Window消息队列,用于将消息发送至信息调试器中,所述信息调试器,用于分析并显示调试信息,并通过Window消息队列查询消息信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105153894A CN103019935A (zh) | 2012-12-05 | 2012-12-05 | 基于Windows消息机制的软件调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105153894A CN103019935A (zh) | 2012-12-05 | 2012-12-05 | 基于Windows消息机制的软件调试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103019935A true CN103019935A (zh) | 2013-04-03 |
Family
ID=47968560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012105153894A Pending CN103019935A (zh) | 2012-12-05 | 2012-12-05 | 基于Windows消息机制的软件调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019935A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及系统 |
CN102117241A (zh) * | 2009-12-30 | 2011-07-06 | 华为技术有限公司 | 一种多核系统调试方法和多核系统 |
US20110307871A1 (en) * | 2010-06-11 | 2011-12-15 | International Business Machines Corporation | Distributed Debugging |
-
2012
- 2012-12-05 CN CN2012105153894A patent/CN103019935A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及系统 |
CN102117241A (zh) * | 2009-12-30 | 2011-07-06 | 华为技术有限公司 | 一种多核系统调试方法和多核系统 |
US20110307871A1 (en) * | 2010-06-11 | 2011-12-15 | International Business Machines Corporation | Distributed Debugging |
Non-Patent Citations (1)
Title |
---|
朱晓东: "Windows系统的动态代码插装技术研究及应用", 《中国优秀硕士学位论文全文数据库》, 15 June 2008 (2008-06-15) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9047413B2 (en) | White-box testing systems and/or methods for use in connection with graphical user interfaces | |
CN105094783B (zh) | 安卓应用稳定性测试的方法及装置 | |
Demathieu et al. | First experiments using the uml profile for marte | |
CN102819492B (zh) | 一种基于Android的关键字驱动自动化测试框架 | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
CN101957793B (zh) | 一种面向Android及其衍生系统的软件操作录制回放方法 | |
EP1179777A2 (en) | Generation of runtime execution traces of applications and error detection | |
US20060200738A1 (en) | System and method for modifying a mobile device application | |
CN103744787A (zh) | 一种手机自动化测试方法 | |
CN107526676B (zh) | 一种跨系统测试方法及装置 | |
CN104426945B (zh) | 一种获取应用性能数据的方法、设备和系统 | |
US20190171546A1 (en) | Application screen mapping for mobile analytics | |
CN110275704A (zh) | 页面数据处理方法和装置,存储介质和电子设备 | |
CN108228173A (zh) | 一种可视化的数据接口开发系统和方法 | |
CN114172835A (zh) | 一种蓝牙数字钥匙的自动化测试方法 | |
CN111142861B (zh) | 结构化综控系统集成方法及装置 | |
CN103019935A (zh) | 基于Windows消息机制的软件调试方法 | |
CN107391354B (zh) | 自动监测终端性能的方法及系统、存储装置 | |
CN109144841B (zh) | 广告应用的识别方法和装置、计算机设备和存储介质 | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN113419932B (zh) | 一种设备性能分析方法和装置 | |
CN115509913A (zh) | 软件自动化测试方法、装置、机器可读介质及设备 | |
WO2019051714A1 (zh) | 一种用于智能设备的应用程序内存的测试方法及测试装置 | |
CN108170420A (zh) | 应用程序包的构建方法、装置和计算机可读存储介质 | |
CN111881025A (zh) | 一种自动化测试任务调度方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130403 |
|
WD01 | Invention patent application deemed withdrawn after publication |