阅读:3496回复:5
Tornado CrossWind (debugger) 调试问题
我在用Tornado 2.0 中的 crosswind (debugger)调试程序时,可以 设置断点,并可以执行run命令,接下来就attach 这个task 也可执行到设置的制定断点上,但是,接着要往下调试(如用 step into,
step over,step out ,F5)时,目标机的警铃就一直响个不停,而且如上的操作也未被执行(step into,step over,step out ,F5)。我该怎么办?,我编译程序时也用了 -g 和o0 选项。请高手们支招,救救小弟!谢谢先!! |
|
沙发#
发布于:2003-11-28 20:09
具体问题是我用Zin6.0 开发程序,调试时如下问题:
系统刚引导起时:(主机Shell) -> i NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY ---------- ------------ -------- --- ---------- -------- -------- ------- ----- tExcTask _excTask 6fb3134 0 PEND 19439e 6fb30a4 0 0 tLogTask _logTask 6fb0830 0 PEND 19439e 6fb079c 0 0 tShell _shell 6f46bb4 1 PEND 1176c4 6f46888 0 0 tTelnetd _telnetd 6f4a864 2 PEND 1176c4 6f4a798 0 0 tWdbTask _wdbCmdLoop 6f481b4 3 READY 1176c4 6f48110 0 0 tNetTask _netTask 6f704f4 50 READY 11762b 6f703d4 0 0 tPortmapd _portmapd 6f4c714 100 PEND 1176c4 6f4c5e4 0 0 value = 0 = 0x0 //////////////////////////////////////////////////////////////// 调试时: 说明: tUglInput _uglInputTas 是WindML 库 ZMAP_VX ZafVxWorksMa 是我的应用程序 /////////////////// Break at 0x00671caf: 0x671caf Task: 0x6f3d0c0 (ZMAP_VX) -> i NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY ---------- ------------ -------- --- ---------- -------- -------- ------- ----- tExcTask _excTask 6fb3134 0 PEND 19439e 6fb30a4 3006b 0 tLogTask _logTask 6fb0830 0 PEND 19439e 6fb079c 0 0 tShell _shell 6f46bb4 1 PEND 1176c4 6f46888 0 0 tTelnetd _telnetd 6f4a864 2 PEND 1176c4 6f4a798 0 0 tWdbTask _wdbCmdLoop 6f481b4 3 READY 1176c4 6f48110 0 0 tNetTask _netTask 6f704f4 50 READY 11762b 6f703d4 0 0 tUglInput _uglInputTas 6f33378 60 PEND+T 1176c4 6f331a0 3d0004 51 ZMAP_VX ZafVxWorksMa 6f3d0c0 90 SUSPEND 671caf 6f3c97c 226 0 SERIAL_TS SerialProc(v 68ed804 90 PEND 1176c4 68ed348 0 0 tPortmapd _portmapd 6f4c714 100 PEND 1176c4 6f4c5e4 16 0 value = 0 = 0x0 -> printErrno(0x3006b) 0x3006b = S_taskLib_TASK_VAR_NOT_FOUND value = 0 = 0x0 -> printErrno(0x3d0004) 0x3d0004 = S_objLib_OBJ_TIMEOUT value = 0 = 0x0 -> printErrno(0x16) 0x16 = S_errno_EINVAL value = 0 = 0x0 ///////////////////////////////////////////////////////////// 执行 step into,step out,set over ,contiue的其中之一都会产生以下异常 并且目标机警铃长鸣, Dbg 执行到 C:\\tornado\\target\\config\\comps\\src\\usrWdbTask.c 的/****************************************************************************** * * vxSemGive - give a semaphore */ static STATUS vxSemGive ( void * semId ) { return (semGive ((SEM_ID)semId)); 《====(此句中就停了) } /**************************/ 也就是最后的1486ce _udpCancel +12 : _vxSemGive ([6f4836c, 6f3ccc4, 13d642, 0, 6f3ccd8]) shell 中显示如下: Exception number 13: Task: 0x6f3d0c0 (ZMAP_VX) General Protection Fault Program Counter: 0x0000000b Status Register: 0x00000008 Error Code : 0x00112c27 623e34 _ZafVxWorksMain__Fv+94 : _excStub (6f3d050) 183b55 _excStub +35 : _excExcHandle (d, 6f3ce84, 6f3ce5c) 1493d9 _excExcHandle +31 : _vxExcHookWrapper (d, 6f3ce84, 6f3ce5c, 6f3ce34) 11228f _vxExcHookWrapper+67 : _wdbExcHook (3, 6f3d0c0, d, 6f3ce84, 6f3ce5c) 14f3d3 _wdbExcHook +9b : _wdbEventPost ([&_statics, &_wdbExcHook, d, 6f3ce5c, 0]) 14ddde _wdbEventPost +62 : _wdbNotifyHost ([3, 6f3d0c0, 0, 6f3cde8, 14f3d8]) 13d640 _wdbNotifyHost +20 : _udpCancel ([0, 6f3cdcc, 14dde3, 3, 6f3d0c0]) 1486ce _udpCancel +12 : _excStub ([6f4836c, 6f3cdb8, 13d642, 0, 6f3cdcc]) 183b55 _excStub +35 : _excExcHandle (d, 6f3cd90, 6f3cd68) 1493d9 _excExcHandle +31 : _vxExcHookWrapper (d, 6f3cd90, 6f3cd68, 6f3cd40) 11228f _vxExcHookWrapper+67 : _wdbExcHook (3, 6f3d0c0, d, 6f3cd90, 6f3cd68) 14f3d3 _wdbExcHook +9b : _wdbEventPost ([&_statics, &_wdbExcHook, d, 6f3cd68, 0]) 14ddde _wdbEventPost +62 : _wdbNotifyHost ([3, 6f3d0c0, 0, 6f3ccf4, 14f3d8]) 13d640 _wdbNotifyHost +20 : _udpCancel ([0, 6f3ccd8, 14dde3, 3, 6f3d0c0]) 1486ce _udpCancel +12 : _vxSemGive ([6f4836c, 6f3ccc4, 13d642, 0, 6f3ccd8]) 请问各位大侠,excStub()函数是怎么被调用的? |
|
板凳#
发布于:2003-12-03 08:39
首先确认你的编译器有没有包含debugger信息,如果没有,请选择上。如果有,怀疑是你堆栈溢出导致的,这种问题我碰到许多次了,不知道你的情况是不是和我的一样,呵呵。
|
|
|
地板#
发布于:2003-12-03 08:43
没有看到你下面的文字说明,不好意思。原来我的程序同样出现这样的问题,是调用memcpy出了问题,后来修改了代码,对调用memcpy的程序进行了修改,所以,OK了。现在你要修改你的调用代码,请详细阅读TORNADO帮助文件,看看函数说明,应该能解决问题。,
|
|
|
地下室#
发布于:2003-12-06 23:32
请问seven版主,如果是堆栈溢出该怎么改?
请问你的memcpy出了问题,后来是怎么修改的,是不用memcpy了,还是另有高招,帮助文件我读了不少,有人说大的 C++ 程序不能调试,是这样吗?我又该详细看TORNADO帮助文件的哪一部分,请你指点迷经,谢谢先! |
|
5楼#
发布于:2003-12-08 12:28
堆栈溢出通常和你要看的数据区过大有关系,所以,调试的时候最好不要观察变量,即使要观察变量,也最好不要观察全局变量。
memcpy()函数是不检查阅界的,比方说,你想复制内存,从0x101复制到0x100,长度为100字节,这是肯定不行的,但memcpy()不检查这些,所以你要申请个备份区做中转才可以。 |
|
|