superwujc 发表于 2014-09-27 15:35

怎样调试进程的内核态数据结构?

例如,对于一个程序#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
    int fd;
    fd = open("/root/test", O_RDWR | O_CREAT, S_IRWXU);

    return 0;
}编译为elf可执行程序后,通过怎样的调试可以查看到内核分配文件描述符的情况,如task_struct, struct fdtable, struct file 等数据结构在运行时的调用过程?
PS:不是嵌入式Linux,而是安装在pc上的x86 linux

请各位不吝赐教

Tinnal 发表于 2014-09-27 17:10

写个KO,通过PID把它的task_struct找出来,就什么都有了。你想找了解分配它们的流程,可以先通过代码阅读,理解代码的大概流程,再在代码里添加打印就可以。
如果想和GDB一样用得爽,就用qemu+gdb直接调试内核。
另外,ftrace提供了第二个了解内核函数调用情况的工具,详情请看:http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace2/

至于那种适合你,就算你自己多多试试了。

superwujc 发表于 2014-09-27 17:26

回复 2# Tinnal
感谢楼上,ftrace小弟粗略了解了一下,貌似只能显示到function与function_graph级别

KO,LKM?共享动态库?
gdb+qemu?
小弟菜鸟,不明觉厉

不过总算提供了思路。非常感谢
   

Tinnal 发表于 2014-09-27 19:09

回复 3# superwujc

不明觉厉
你上得内核源码这个版,就不能这么去说,不懂就去学。如果你没有这种愿意,请把你这贴发到C/C++版。
   

superwujc 发表于 2014-09-27 22:52

回复 4# Tinnal
非常感谢


   

shihyu 发表于 2015-09-14 23:45

本帖最后由 shihyu 于 2015-09-14 23:45 编辑

写个KO,通过PID把它的task_struct找出来<--- 通过KO的 PID 找出对应的 task_struct ?

谢谢

susu1399 发表于 2015-09-15 09:35

写个linux内核模块,也就是上面人说的ko。可以遍历进程链表init_tasks,然后打印struct task_struct类型对应的字段(也可以通过pid找某个进程结构体),你去研究struct task_struct结构体就可以知道进程打开哪些文件(files_struct),具体怎么通过字段去获取,你可以下载一个版本的linux内核源码,去研究内核是怎么操作哪些字段的。这些程序你在网上搜都可以找到的。通过这个,你可以了解内核很多东西。
页: [1]
查看完整版本: 怎样调试进程的内核态数据结构?