San*_*ngh 6 unix gdb systems-programming
我用-g选项编译了我的freebsd libc源代码,现在我可以介入libc函数了.
但我无法进入系统调用代码.我用-g编译了freebsd内核源代码.在设置断点时,gdb会在.S文件上通知断点.在点击断点时,gdb无法进入系统调用源代码.
另外,我试过:gdb $ catch系统调用打开
但这也行不通.
你能建议一下吗?
谢谢.
您似乎对UNIX系统的工作原理基本缺乏了解.
想一想.假设您能够进入实现系统调用的内核函数,比如说sys_open.所以现在你sys_open在调试器中查看内核源代码.问题是:内核是在那个点运行,还是停止了.既然您想要next在调试器中执行某些操作,那么我们假设内核已停止.
所以现在你按下n键,会发生什么?
通常,内核会对键盘引发的中断作出反应,找出按下了哪个键,然后将该键发送到正确的进程(read(2)从控制键盘的终端被阻塞的进程).
但你的内核已停止,所以没有按键给你.
结论:通过在同一台机器上运行的调试器调试内核是不可能的.
事实上,当人们调试内核时,他们通常是通过在另一台机器上运行调试器来实现的(这称为远程调试).
如果你真的想要进入内核,那么最简单的方法就是使用UML.
在您使用UML并了解用户空间/内核接口如何工作和交互之后,您可以尝试kgdb,尽管设置通常有点复杂.您实际上不必为此拥有单独的计算机,您可以使用VMWare或VirtualPC或VirtualBox.