有gdb
只读模式吗?
有没有办法可以将 gdb 级别限制为只读。所以我将无法修改gdb中的当前数据。
gdbserver 或任何其他工具可以在这种情况下提供帮助吗?
答案1
如果您不想让开发人员更改内容,为什么不给他们一个 coredump 呢? coredump 是进程内存映射的转储。有了这个和生成核心转储的二进制文件,您可以在不运行应用程序的情况下调试它(只需要调试信息)。要生成 coredump,请使用gcore
命令。
答案2
gdb 没有只读模式,而且 gdb 也不是调试程序的唯一方法(它没有特殊权限)。 Gdb使用跟踪下面,ptrace 权限是全有或全无。
有些安全框架限制 ptrace 的使用。例如,
最新的 Ubuntu 版本ptrace
默认限制为父进程。但这些限制是关于谁可以在哪个进程上使用 ptrace,而不是关于允许哪些 ptrace 命令。我不知道有哪个框架具有区分 ptrace 命令的细粒度权限。
您似乎希望允许开发人员实时调查生产服务器上的问题,而不让他们修改这些系统的行为方式。解决这个问题的一个办法是在虚拟机中运行所有服务器。如果出现问题,制作虚拟机的快照,将其复制出来,让开发人员根据快照进行工作(断开网络连接)。这甚至使开发人员的工作变得更容易,因为他们可以根据保存的快照多次重新启动调试。