目前的Linux内核debugging技术

目前的Linux内核debugging技术,第1张

概述目前的Linux内核debugging技术

linux机器在启动和运行软件(包括自定义驱动程序)几个小时后就冻结了。 我正在寻找一种方法来deBUGging这样的问题。 最近,linux内核deBUGging技术已经有了重大进展,不是吗?

我恳请分享一些关于这个话题的经验。

内核vs系统中的windows进程

linux内核 – 为什么System.map中的函数地址是实时看到的地址之前的一个字节?

阅读单个部门

来自copy_to_user的'错误的地址'错误

有没有从Xenomai实时线程调用gettimeofday()的安全方法?

如果您可以在虚拟机内部重现问题,那么确实有一个相当新的(AFAIK)技术可能是有用的:从运行它的主机调试虚拟机。

例如,请参阅: 使用windows主机在VMWare中调试linux内核

VMware Workstation 7还支持一种功能强大的技术,可以确定性地记录系统执行情况,然后按需要进行重放,甚至可以倒退。 所以,一旦系统崩溃,你可以倒退,看看发生了什么(甚至尝试改变的东西,看看它是否仍然崩溃)。 IIRC我读了一个地方,你不能这样做,同时使用VMware / gdb调试内核。

显然,你需要一个VMM。 我不知道VMware的VMM系列支持VMM,除此之外,我不知道是否有免费的VMware版本支持这个功能。 可能不是; 人们真的不能期望一个商业公司免费赠送所有东西。 试用版是30天。

如果你的自定义驱动程序是在机器内部的硬件,那么我想这可能不会工作。

SystemTap似乎是linux的Dtrace到Solaris的,但是我觉得它使用起来相当不友好。 不过,你可能想尝试一下。 注意:使用调试信息编译内核,并花费一些时间来使用内核检测钩子。

这就是为什么这么多人仍然使用printk()后经验性地缩小到一个特定的模块的BUG。

我不推荐它,只是指出它存在。 我可能不够聪明,欣赏一些潜在的美。我只是写奇怪的设备的驱动程序。

根据您想调试的问题种类,有许多种不同的技术。 在你的情况下,第一个问题是“系统真的冻结了吗?”。 您可以启用魔术sysrq键并检查冻结时的系统状态并从那里开始。

可能最直接的方法是启用内核调试程序并通过串行电缆连接到它。

我如何调试这种错误,是在VirtualBox中运行我的 *** 作系统,然后用kgdb内建编译内核。 然后我在VirtualBox上设置一个串行控制台,这样我就可以通过串行控制台将gdb连接到VirtualBox的OS内核。 任何时候 *** 作系统挂起,就像神奇的sysrq键一样,我可以在gdb上输入ctrl-c来停止并理解当时的内核。

通常情况下,内核堆栈跟踪很难查明罪魁祸首进程,所以我认为最好的方法仍然是通用的“top”命令,只需查看应用程序日志,看看挂起的原因是什么 – 这将需要重新启动才能看到日志当然。

一个选择是使用kprobes。 谷歌快速搜索将显示您所需的所有信息。 这不是特别难使用。 kprobes是由IBM创建的,我认为它是内核调试的解决方案。 它本质上是一个精心制作的printk()形式,但是它允许你处理使用处理程序插入的任何“断点”。 这可能是你在找什么。 所有你需要做的就是把一个模块写入insmod模块到内核中,它将处理你在模块中指定的任何“断点”命中。

希望可以成为一个有用的选择…

总结

以上是内存溢出为你收集整理的目前的Linux内核debugging技术全部内容,希望文章能够帮你解决目前的Linux内核debugging技术所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1288567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存