今天在调多任务的时候,老是被抢占所困扰,大家在调试时也要注意,如果其他任务将调试任务抢占 ,你设的断点就会没响应一直running下去。下面是调试方法:
VxWorks具有两种调试模式 开发工具对目标机应用程序的调试方法有两种模式。一种是系统模式。对整个应用系统进行调试,可在系统中设置断点等。调试中应用系统必须停下来;另一种是任务模式(即动态调试)。调试是针对系统中某一任务模块进行的,整个系统仍可保留在工作状态。同样在对整个系统调试时,也可一个模块一个模块进行,调好一个运行一个,这样对加速调试速度,方便系统调试提供了很大方便。
任务模式调试
在任务调试模式下,在一个集成环境中,在一个任务中调试,在另一个任务中设置断点,设置的断点不起作用。这是因为一个调试器只能处理一个TCB(任务控制块),每个任务都有一个TCB,因此一个调试器只能调试一个任务,要调试几个任务就要启动几个调试器。一个集成环境只能启动一个调试器,所以要调试几个任务就要启动几个集成环境。另外,需要在被调试的任务的待调试的第一条语句前加入taskSuspend(0)语句,挂起该任务,否则任务就可能会在调试前被执行。
在任务调试模式下,在一个任务中调试,当任务运行到此断点时,只有此任务停止,而不是整个系统。
特点: 只能调试任务,不能调试ISR;
缺省情况下,断点只影响 attached Task;
当 attached 任务停止时,系统中的其它任务及ISRs继续运行;
与WDB代理的通讯方式是中断驱动方式。
系统模式调试
系统模式有时也称为外部模式(External Mode),在此模式下,target server 运行在VxWorks系统之外。
系统调试模式下,允许开发者挂起整个VxWorks操作系统。系统调试模式下一个值得注意的应用是调试ISRS,因为ISR运行在任务上下文之外,并且对缺省任务模式的调试工具不可见。
在系统调试模式下,可以同时调试多个任务、中断服务程序(ISR),调试影响整个系统。
Tornado1.0集成环境下,在系统模式下进行程序调试,主机与目标机之间必须使用串口通信。Tornado2.0集成环境提供了通过网口进行系统模式调试的功能(END 功能)。系统缺省使用网口通信,如果需要使用串口通信,需要修改文件C: \ Tornado \ target\config
系统调试模式下,run命令不可用,可以使用WindSh调试。
特点: 可以调试任务、ISRs 以及核前(pre-kernel)的VxWorks执行;
断点使整个系统停止;
当系统停止时,外部WDB代理运行在中断锁定方式,在此期间,与WDB代
理的通讯方式为 Polled 模式;
通过以太网调试时,为了支持Polled模式通讯 需使用END网卡。(注:Tornado
串行驱动也支持Polled模式及系统级调试。
注:系统模式和任务模式的互换:
点击debug->attach, 从任务模式到系统模式;
点击debug->detach, 从系统模式到任务模式
在debug-command-line下,模式转换的命令为(gdb)attach system (gdb)detach
shenyandetongxing_551209819 2006-12-17 17:58
用户54598 2006-12-5 10:04
谢谢楼主介绍