免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: albcamus
打印 上一主题 下一主题

VMWare Workstation 6.0调试Linux Kernel,竟如此方便 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-04-23 13:41 |只看该作者
原帖由 SCvsCS 于 2007-4-20 17:04 发表于 9楼  
LKML的链接在哪里?
另外我要打击一下楼主,实际上你不可能进行源代码级调试的,因为Linux内核不支持-g和-ggdb编译选项
那个图是你的实践成果还是转的?info threads命令结果咋样?



这点就是我的疑问。实际上这个问题只存在于内核源代码级调试器。

如果是kdb这样的东西,就无所谓了。

似乎linux开发中没有debug版的kernel?

又似乎linux kernel里没有写assert函数的地方?


因为工作关系,不再看linux内核代码了,谁能确认一下?

论坛徽章:
0
22 [报告]
发表于 2007-04-23 14:24 |只看该作者
原帖由 Solaris12 于 2007-4-23 13:36 发表于 20楼  



我想这点验证起来很容易。首先看一下linux系统的进程有多少个,然后drop到gdb,用命令查看一下,是不是都可以找到。

他说这个linux是debug版的linux,难道是动态追加的 debug信息?我相信楼主安装的是 ...



我说的“语义”是什么意思? 就是如 这篇文章说的这样:
http://www.goproxing.com/index.p ... 3Nwb3QuY29tLw%3D%3D
> If you have SMP VM, then each VCPU is mapped on a thread, so use "info threads" and "thread NN" to switch between them.


我GUEST Linux中只有KERNEL被调试, 与光盘有什么关系?  kernel是我编译的, 打开了kernel hacking中的一些选项。 --上文都提到过的。

论坛徽章:
0
23 [报告]
发表于 2007-04-23 14:48 |只看该作者
一直就没弄明白怀疑的朋友在怀疑什么。

怀疑linux kernel不支持-g选项吗?那么请看TOP Makefile中这行:
ifdef CONFIG_DEBUG_INFO
CFLAGS                += -g
endif


至于CONFIG_DEBUG_INFO在哪儿定义, menuconfig时到Kernel Hacking中去找找就行了。  ──而且我记得这个选项存在好久好久了。



怀疑做不到C 源代码级别的single step吗?  那么请自己动手试试看吧。


至于i th的语义, 我怀疑是跟gdb server是implement-specific的, 不见得就必需得象调试用户程序那样。

论坛徽章:
0
24 [报告]
发表于 2007-04-23 15:24 |只看该作者
原帖由 albcamus 于 2007-4-23 14:48 发表于 23楼  
一直就没弄明白怀疑的朋友在怀疑什么。

怀疑linux kernel不支持-g选项吗?那么请看TOP Makefile中这行:


至于CONFIG_DEBUG_INFO在哪儿定义, menuconfig时到Kernel Hacking中去找找就行了。  ──而且 ...

单步调试的时候会不会进入中断处理程序?如果能不进入的话,就是巨大的进步了。

论坛徽章:
0
25 [报告]
发表于 2007-04-23 15:24 |只看该作者
原帖由 mingyanguo 于 2007-4-23 15:24 发表于 24楼  

单步调试的时候会不会进入中断处理程序?如果能不进入的话,就是巨大的进步了。


没有qemu的毛病,放心哈哈

论坛徽章:
0
26 [报告]
发表于 2007-04-23 15:33 |只看该作者
原帖由 albcamus 于 2007-4-23 14:24 发表于 22楼  

我说的“语义”是什么意思? 就是如 这篇文章说的这样:
http://www.goproxing.com/index.p ... 3Nwb3QuY29tLw%3D%3D
> If you have SMP VM, then each VCPU is mapped on a thread, so use "info threads" and "thread NN" to switch between them.


我GUEST Linux中只有KERNEL被调试, 与光盘有什么关系?  kernel是我编译的, 打开了kernel hacking中的一些选项。 --上文都提到过的。



抱歉 ,原来是自己编译的kernel,那我就明白了。 我以为vmware支持在不定制kernel上做debug.


至于gdb具体的命令,我不大熟悉,我只是根据我对solaris内核调试器的理解,在solaris 内核调试器上查看内核线程和用户进程都很方便,这样就可以验证那位老兄说的是否正确。

论坛徽章:
0
27 [报告]
发表于 2007-04-23 15:33 |只看该作者
原帖由 albcamus 于 2007-4-23 15:24 发表于 25楼  


没有qemu的毛病,放心哈哈

帅啊,能调Linux基本就意味着可以调所有的了,
不过,我看了下现在QEMU能模拟最多255个CPU(看上去很猛啊。。。),就是有bug,
vmware现在能不能不管host机的CPU数量模拟SMP?

论坛徽章:
1
戌狗
日期:2013-09-27 21:34:55
28 [报告]
发表于 2007-04-23 15:43 |只看该作者
在Makefile里面向上面再找找

ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
CFLAGS                += -Os
else
CFLAGS                += -O2
endif

就是说cflags是先有的-o2再有的-g选项,你把这个-o2改成-g看看能不能编译
我说这个内核根本就是不能100%做到源代码一级的调试是有实践做支持的。现在kgdb已经不免费了,以前的那个2.6.16版的环境我已经扔了,没法抓图了,但kgdb给gdb的线程概况报告比你的详细的多,所以你可以自由在不同线程间(实际上是进程间)切换并且查看它们的堆栈!

论坛徽章:
0
29 [报告]
发表于 2007-04-23 15:46 |只看该作者
原帖由 SCvsCS 于 2007-4-23 15:43 发表于 28楼  
在Makefile里面向上面再找找

ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
CFLAGS                += -Os
else
CFLAGS                += -O2
endif

就是说cflags是先有的-o2再有的-g选项,你把这个-o2改成-g看看能不能编译
我说这个内核根 ...



如果我没记错, 即是是用户程序, -O和-g同时使用, 对gdb的调试效果也是有影响的吧? 这和kernel没关系啊

论坛徽章:
0
30 [报告]
发表于 2007-04-23 15:46 |只看该作者
原帖由 SCvsCS 于 2007-4-23 15:43 发表于 28楼  
在Makefile里面向上面再找找

ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
CFLAGS                += -Os
else
CFLAGS                += -O2
endif

就是说cflags是先有的-o2再有的-g选项,你把这个-o2改成-g看看能不能编译
我说这个内核根 ...

这种调试与kgdb应该是不同的,这种做法应该是在虚拟的CPU里面做了个gdb stub,并不管上面的OS,所以看实际的进程应该是不太可能的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP