QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2792|回复: 12

关于skyeye的gdb remote调试问题!

[复制链接]
发表于 2008-1-29 17:35:02 | 显示全部楼层 |阅读模式
经过好几天的尝试,终于把gdb insight和skyeye连起来了,调试基本可行。
可目前skyeye只支持step调试,而且还是汇编的单步,我调试发现,gdb在c语言下,点step和next,我想这本来应该是跳C语言的一句,和一个函数,可发现,gdb发送的仍然是‘s’啊!有些不解。不知道有没有高手可以指点一下,其中奥妙。
还有“S”这个command是做什么呢。
不知道什么时候skyeye可以很好的支持gdb,就好了。
必竟debug是很重要的。
发表于 2008-1-31 13:29:54 | 显示全部楼层
http://sourceforge.net/tracker/i ... 554&atid=576533
嗯,目前next指令还是有问题。只能用step指令,我目前结合break和finish这几个gdb命令可以达到next命令的效果,但是麻烦了一点,勉强可以用。争取在下个版本把next这个问题解决掉。
回复

使用道具 举报

 楼主| 发表于 2008-1-31 14:56:44 | 显示全部楼层
真是太好了,有个问题一直不太明白。
在gdb中用C语言调试,step的话,也应该是step一个C语句,可一句C是由多条汇编组成,但我看gdb还是发的s命令,那skyeye怎么能判断要走几句呢,
如果太复杂,就不用回答了,呵呵!
回复

使用道具 举报

 楼主| 发表于 2008-1-31 16:45:00 | 显示全部楼层
我trace了一下,gdb,不管是在step,next,还是stepi,nexti的情况下,发出来的cmd都一样,那怎么才能区分这四种command,真是搞不懂,有没有人知道呢!
回复

使用道具 举报

 楼主| 发表于 2008-2-1 14:23:24 | 显示全部楼层
看了一下gdb代码大概知道了,好象是gdb 自己会区分,如:step,next C语言代码时,会计算要跳几条汇编,然后再repeat send “s” command,但不知道为什么发第一个command后,skyeye回了一个为1的signal后,gdb就不去循环了。gdb太大了,看的头晕,
我想应该是skyeye回的包可能有问题。麻烦。
回复

使用道具 举报

发表于 2008-2-1 15:50:47 | 显示全部楼层
yes, I think the signal from skyeye to gdb is wrong. I think that is probably the failed reason of next command.SkyEye should not send SIGHUP signal for next command. So I recommend you can understand what signal sould be sent when run "next" command. Also you can read some implementation of gdbserver in uClinux, gdb stub in bochs etc.
回复

使用道具 举报

 楼主| 发表于 2008-2-1 16:01:36 | 显示全部楼层
我把signal改成5后(以前是1),看起来好象好了,我试了,C语言的step和next都可以用了。不过还要继续测试。
回复

使用道具 举报

发表于 2008-2-1 16:29:21 | 显示全部楼层
If you can find a list for which signal for which command in gdb. That will be better. I ever spent a lot of time but can not find any documentation about it.
回复

使用道具 举报

 楼主| 发表于 2008-2-2 10:56:43 | 显示全部楼层
我也没有文档,我只试了一下,改成5后,是可以的,你可以试试,感觉不错
回复

使用道具 举报

发表于 2008-2-14 09:08:58 | 显示全部楼层
你是怎么捕捉到GDB与skyeye之间的signal的?just debug?
回复

使用道具 举报

发表于 2008-2-18 09:17:38 | 显示全部楼层
根据楼主的说法我试了一下将singal改成5编译后是可以next的了,不过我想调试却没调出来,好像那几个地方不能设断点。
后将skyeye重新用-o编译后skyeye就不能用了,skyeye加载内核一直会加载到0x0000001e,改回来重新编译后还是这样,不知为什么
回复

使用道具 举报

 楼主| 发表于 2008-2-21 19:43:37 | 显示全部楼层
我是在44b0x上用的,我没有用-e去装载linux,
因为我觉得可能还是要让bootloader先run起来。
我把bootloader.bin和zimage,romfs.bin三个文件合在一起,生成新的bin,linux.bin直接运行。
我修改了一下,skyeye增加一个线程监视网络socket。这时skyeye开始正常运行linux.bin,
这时,我用gdb去连接,(我用的是insight,其实都一样),这时会显示连接正常,有可能这时,无法看到代码,是因为可能还在bootloader里run,没有到linux,在start_kernel设个断点,再run,等一会儿就会停止在start_kernel里了。这时,就可以单步了,用了很长一段时间,感觉还可以,很稳定,只是有时会,想要进入C函数的 step,可变成了next,比较怀疑是gdb问题,其它功能都正常。
回复

使用道具 举报

发表于 2008-2-29 18:04:34 | 显示全部楼层
所用的信号定义应该是参考下面的定义:
Signal Name Number Description
SIGHUP 1 Hangup (POSIX)
SIGINT 2 Terminal interrupt (ANSI)
SIGQUIT 3 Terminal quit (POSIX)
SIGILL 4 Illegal instruction (ANSI)
SIGTRAP 5 Trace trap (POSIX)
SIGIOT 6 IOT Trap (4.2 BSD)
SIGBUS 7 BUS error (4.2 BSD)
SIGFPE 8 Floating point exception (ANSI)
SIGKILL 9 Kill(can't be caught or ignored) (POSIX)
SIGUSR1 10 User defined signal 1 (POSIX)
SIGSEGV 11 Invalid memory segment access (ANSI)
SIGUSR2 12 User defined signal 2 (POSIX)
SIGPIPE 13 Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM 14 Alarm clock (POSIX)
SIGTERM 15 Termination (ANSI)
SIGSTKFLT 16 Stack fault
SIGCHLD 17 Child process has stopped or exited, changed (POSIX)
SIGCONT 18 Continue executing, if stopped (POSIX)
SIGSTOP 19 Stop executing(can't be caught or ignored) (POSIX)
SIGTSTP 20 Terminal stop signal (POSIX)
SIGTTIN 21 Background process trying to read, from TTY (POSIX)
SIGTTOU 22 Background process trying to write, to TTY (POSIX)
SIGURG 23 Urgent condition on socket (4.2 BSD)
SIGXCPU 24 CPU limit exceeded (4.2 BSD)
SIGXFSZ 25 File size limit exceeded (4.2 BSD)
SIGVTALRM 26 Virtual alarm clock (4.2 BSD)
SIGPROF 27 Profiling alarm clock (4.2 BSD)
SIGWINCH 28 Window size change (4.3 BSD, Sun)
SIGIO 29 I/O now possible (4.2 BSD)
SIGPWR 30 Power failure restart (System V)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 00:54 , Processed in 0.042254 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表