Chinaunix

标题: gdb如何调试守护程序(守护程序多线程) [打印本页]

作者: 司令lovelinux    时间: 2006-10-16 09:40
标题: gdb如何调试守护程序(守护程序多线程)
程序为一个守护程序,而守护程序又是一个多线程的.
我打算先set follow-fork-mode child,让gdb在程序fork之后直接调试子程序;然后
info threads,调试各个线程,但是在info threads时显示错误(Cannot find new threads: generic error).
另外我的gdb里不能set detach-on-fork,没有detach-on-fork.
gdb -v
GNU gdb Red Hat Linux (6.3.0.0-1.96rh)

(gdb) break main
(gdb) break (fork之后属于子程序的代码)
(gdb) set follow-fork-mode child
(gdb) r
(gdb) n
......
(gdb)info threads
Cannot find new threads: generic error
作者: 司令lovelinux    时间: 2006-10-16 10:05
呼唤高手.
作者: xfly_t    时间: 2006-10-16 10:11
bt 下,看看是那个函数出了问题,再查查那个函数的输入输出,如果程序是你写的大体就知道在那了

应当同vc差不多吧,只是一个是图形的,爽点
作者: 司令lovelinux    时间: 2006-10-16 10:15
标题: 回复 3楼 xfly_t 的帖子
谢谢,应该不是函数的问题.
作者: 司令lovelinux    时间: 2006-10-16 11:05
标题: 回复 4楼 司令lovelinux 的帖子
就这样沉了吗?问题不知道说清楚没有.
作者: mingyanguo    时间: 2006-10-16 11:16
你可以让server在调试的时候不作为daemon,加个编译选项。
我就是这么偷懒的
多线程,我只知道printf与log。
作者: 司令lovelinux    时间: 2006-10-16 11:42
标题: 回复 6楼 mingyanguo 的帖子
是个好主意,不当做daemon来调试,直接就是调试多线程的问题了.非常感谢.

调试多线程我也正在看,也不是很熟.哪为大牛可以教教.呼唤大牛.
作者: yulc    时间: 2006-10-16 11:53
调试多线程程序, 谈何容易.
在运行时态往往是由于同步,并发引起的问题,
在你调试时根本不会出现.
调试的方法不难,但在实际debug时,我觉得有效的却依然是printf 和 syslog...
完全赞同6楼的方法.
作者: 司令lovelinux    时间: 2006-10-16 12:02
标题: 回复 8楼 yulc 的帖子
那如果不考虑同步,并发等问题,
我用info threads , thread threadno等调试,
调试的时候线程老切换,有什么办法调试一个线程的时候其他的先停下来,只调试一个线程啊?
作者: linternt    时间: 2006-10-16 14:06
只调试一个倒是可以,让其它的先停下来能不能就不知道了,不过可以在程序中让它休眠,可是不知道会不会对你的调试有无影响。
作者: 司令lovelinux    时间: 2006-10-16 14:20
标题: 回复 10楼 linternt 的帖子
只调试一个怎么调试啊?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2