c - 将程序状态导出到 procfs?

标签 c reflection linux-kernel procfs

我可以在 procfs 中创建任何文件映射来反射(reflect)我的程序的内部状态吗?

例如,

main.c:

char *message;

...

假设 pid 是 1200,是否可以创建一个临时文件/proc/1200/variables/message,它将反射(reflect)消息变量?

我想我需要使用 proc fs,因为有/proc/.../{net, fd, task, etc.},如果我想在过程 fs?

最佳答案

没有工具可以完成您想完成的事情。

有些东西关闭 -- gdb(1) 知道如何内省(introspection)正在运行的程序并显示某些变量的值(并非所有变量都在编译后存活-- 虽然调试 -g 标志帮助 gdb(1) 发现可能对您的程序进行了哪些优化。

FUSE项目使用户空间程序可以通过内核为其他进程提供文件系统。您可以直接使用 FUSE 从您的程序中导出选定的变量,或者您可以尝试一些更雄心勃勃的事情并编写工具来封装 gdb(1) 的内省(introspection)能力和 FUSE 的发布能力,并为世界。

您也可以考虑使用 9p从您的程序内部——它在本质上类似于 FUSE,允许程序通过文件系统接口(interface)为其功能提供接口(interface)。 (您可以在 wmii window manager 中看到它的使用,其中可以通过文件系统接口(interface)对窗口管理器进行数量惊人的控制,从而可以使用您喜欢的任何语言轻松进行编程。)您可以再次将其与 gdb(1) 的内省(introspection)能力试图提供这一点。

我希望这样的项目值得高级项目或研究生院项目——而不是很快就能完成的事情。

关于c - 将程序状态导出到 procfs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8192937/

相关文章:

linux - 如何为旧的 Linux 发行版构建应用程序,并避免 fatal error : kernel too old error?

c - 进程的虚拟地址空间的哪些部分是可覆盖的?

c - 如何解决强化报告中的整数溢出? (C代码)

java - 在构造函数中获取child的注解值

c# - 为什么反射(reflection)自己的类型在 T4 模板中不起作用?

java - 如何使用 java 反射自动将值从 java bean 复制到 protobuf 消息对象?

c - 在 C 中扩展结构

c++ - 改进 malloc() 算法的下一步是什么?

linux - System.map文件中address的含义

networking - 为什么在ifconfig下不抓包?