maple_wasp
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:3496回复:5

Tornado CrossWind (debugger) 调试问题

楼主#
更多 发布于:2003-10-16 18:00
我在用Tornado 2.0 中的 crosswind (debugger)调试程序时,可以 设置断点,并可以执行run命令,接下来就attach 这个task 也可执行到设置的制定断点上,但是,接着要往下调试(如用 step into,
step over,step out ,F5)时,目标机的警铃就一直响个不停,而且如上的操作也未被执行(step into,step over,step out ,F5)。我该怎么办?,我编译程序时也用了 -g 和o0 选项。请高手们支招,救救小弟!谢谢先!!
maple_wasp
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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()函数是怎么被调用的?

seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-03 08:39
首先确认你的编译器有没有包含debugger信息,如果没有,请选择上。如果有,怀疑是你堆栈溢出导致的,这种问题我碰到许多次了,不知道你的情况是不是和我的一样,呵呵。
我爱中医:http://www.ngotcm.com/forum/index.php
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-03 08:43
没有看到你下面的文字说明,不好意思。原来我的程序同样出现这样的问题,是调用memcpy出了问题,后来修改了代码,对调用memcpy的程序进行了修改,所以,OK了。现在你要修改你的调用代码,请详细阅读TORNADO帮助文件,看看函数说明,应该能解决问题。,
我爱中医:http://www.ngotcm.com/forum/index.php
maple_wasp
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-06 23:32
请问seven版主,如果是堆栈溢出该怎么改?
请问你的memcpy出了问题,后来是怎么修改的,是不用memcpy了,还是另有高招,帮助文件我读了不少,有人说大的 C++ 程序不能调试,是这样吗?我又该详细看TORNADO帮助文件的哪一部分,请你指点迷经,谢谢先!


seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-08 12:28
堆栈溢出通常和你要看的数据区过大有关系,所以,调试的时候最好不要观察变量,即使要观察变量,也最好不要观察全局变量。
memcpy()函数是不检查阅界的,比方说,你想复制内存,从0x101复制到0x100,长度为100字节,这是肯定不行的,但memcpy()不检查这些,所以你要申请个备份区做中转才可以。
我爱中医:http://www.ngotcm.com/forum/index.php
游客

返回顶部