您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 浅谈Tornado22下程序调试
浅谈Tornado2.2下程序调试“调试一段程序的难度是写出这段程序的难度的两倍,因此,如果你的代码尽可能清楚,那么你就不用费力的调试它”--BrianW.Kernighan“有时周一宁愿休息而不是花一周余下的时间调试周一的代码”--ChristopherThompson…..…..调试对于软件的成败至关重要,正确使用恰当的调试工具可以提高发现和改正错误的效率。一、调试前的准备工作1、保证目标机跟主机能网络正常通信。如果tornado是装在虚拟机中,则要保证虚拟机跟目标机能网络通信。用pingxx.xx.xx.xx–l1500命令。之所以后面要加-l1500是为了保证最大包也能ping通,如果不加-l则为ARP包,ARP包只有64个字节。在网络通信中会出现小包能ping通,大包ping不通的情况。2、保证WDB为Ready状态图1如果WDB为unReady状态,很可能是WDB的组件没有加。二、配置TargetServerTargetServer是Tornado集成交叉开发环境中最重要的工具。这个工具负责主机与目标机的连接,为其他的工具使用提供通信桥梁。点击”Tools-TargerServer-configure”。出现如下图2所示:图2Targetserver配置界面配置界面中TargerServer要填入主机的IP地址,TargerServerPropertiesBackEnd(后端)默认选择wdbrpc,它是最常用的连接类型,其支持任意种IP连接(如以太网)。TargetName/IpAddress需要填入目标机的IP地址。主机和目标机的IP地址可以在bootrom起来后看到,如图3所示。图3bootrom启动打印TargerServerProperties之CoreFileandSymbols,在File选项中选择主机vxworks镜像的路径,如图4所示。图4核心文件选择一定要保证主机的镜像和目标机的镜像为同一镜像。如果重新编译程序,则需要重启目标机,从网口加载最新编译的vxworks镜像。TargerServerProperties之MemoryCacheSize。为了避免主机和目标机之间过度的数据传输。TargerServer在内存中开辟了一个用于缓存目标机存储器使用状况的缓冲区。通过这个缓冲区,TargerServer可随时向Tornado的各种工具(如windShell等)提供相关数据。MemoryCacheSize用来设置该缓冲区的最大存储空间。如图5所示。图5内存缓冲区尺寸设置经过上面几步之后,TargetServer设置完毕。设置完成后,然后点击配置界面下的Launch。这时在工作界面的右下届出现Target图标。点击该图标,出现如图6所示界面。如果显示如图6所示界面则表示TargetServer配置正确。图6Targetserver打印三、交叉调试Debugger当Targetserver配置完成后。点击Tools-Debugger,出现如图7所示界面。然后点击OK。图7登陆Debugger界面然后点击工具栏上的Debug-Run,出现如图8所示界面。图8运行任务在Task栏中输入要调试的函数。Arguments为函数的参数,参数用空格隔开而非逗号。勾选Breakatentrypoint,在函数的入口处断住。点击OK后进入调试界面,如图9所示。图9调试界面进入调试界面后可以用快捷键或点击图标进行单步跟踪。F11为单步执行。F10为单步执行,但遇到子函数后不会进入。下面以do_init为例讲下调试过程。在控制台输入do_init,会打印如下的异常信息。图10控制台异常信息打印图中红色的标记为函数的调用关系,从图中可以看出,do_init最后会调用i2cIoctl函数,后面就异常了。这时我们可以在i2cIoctl之前的函数i2cCycleMpc85xxStart的入口处设置断点,如图11所示。图11设置断点。按F5,程序最后会执行到断点处。然后再单步跟踪,打开watch窗口,将要观察的变量放入到watch窗口中观察,最后发现是因为pI2cDrvCtrl的值为0,从而导致结果异常,而pI2cDrvCtrl是在i2cDrvAppInit函数中被初始化,如果在调用do_init函数之前调用i2cDrvAppInit,异常就不会产生。如果是系统函数,可以使用view-mixedsourceandDisasseamble出现如图12所示混合的汇编和源程序界面。通过单步跟踪最后也能跟到问题所在。图12混合的汇编和源程序界面
本文标题:浅谈Tornado22下程序调试
链接地址:https://www.777doc.com/doc-2268477 .html