我的程序如何附加一个正在运行的程序?就像 gdb 一样。在Linux中
Posted
技术标签:
【中文标题】我的程序如何附加一个正在运行的程序?就像 gdb 一样。在Linux中【英文标题】:how my program attaches a running program? like gdb does. in linux 【发布时间】:2011-03-24 02:31:39 【问题描述】:我想知道 gdb 如何在 linux(*nix) 中附加一个正在运行的程序?
我有 Windows“钩子”编程经验。 在 Windows 上,我可以为程序(或任何程序)的某些事件注册一个“钩子”,当事件发生时(例如鼠标单击),操作系统将我的钩子 dll 注入该程序的进程空间并调用我的回调函数.然后我的程序附加一个正在运行的程序并访问附加程序的数据和功能。
linux是怎么做的?和Windows类似吗?
提前谢谢您!
【问题讨论】:
【参考方案1】:看起来是通过ptrace() 函数。虽然,我从来没有玩过它。
【讨论】:
ptrace() 手册说:“ptrace() 系统调用提供了一种方法,父进程可以通过该方法观察和控制另一个进程的执行,... " 这意味着我的程序必须是我要附加的程序的父程序?我该怎么做? @iCoder:跟踪子进程是更简单的方法,但您也可以使用ptrace(PTRACE_ATTACH, pid, 0, 0)
跟踪同一用户拥有的不相关进程以上是关于我的程序如何附加一个正在运行的程序?就像 gdb 一样。在Linux中的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 eclipse CDT 中将调试会话附加到正在运行的程序