如何在运行时读取/检查二进制文件的变量?

问题描述 投票:0回答:1

假设我们将一个 C 程序(带有调试符号)编译成二进制文件并运行它。我们现在想知道进程运行时进程内部变量的状态。

最直接的方法是将变量打印到标准输出并从日志中读取它们。这就是我现在所做的,但由于我试图监视跟踪循环中的变量,因此有以下缺点:

  1. 标准输出中有很多混乱,其他信息也很混乱
  2. 由于 printf 延迟导致性能下降(=跟踪循环受到影响!)
  3. 检查不同的变量需要更改代码并重新编译

我想知道是否有办法从外部访问变量。无需印刷。当然,我们可以挖掘进程的内存,但这绝不是一项微不足道的任务。 同时,我们知道访问变量是可能的,因为 gdb 可以做到。如果 gdb 可以访问它们,我想我们也应该能够使用一些 unix 命令来访问它们?还是我这里弄错了?

c variables memory process gdb
1个回答
0
投票
如果 gdb 可以访问它们,我想我们也应该能够通过一些 unix 命令来访问它们?

当然:还有其他 UNIX 命令可以访问变量。例如
lldb

也可以做到。

您的实际问题可能是:“我们可以在没有完整调试器的情况下做到这一点吗?”。

答案是:并非如此。为了在运行时访问另一个进程中的任意变量,您非常需要实现一个调试器。

但是,运行带有完整调试器的程序通常会导致不可接受的开销。

通常的解决方案是使用某种跟踪框架 - 您将一些代码放入程序中,然后根据需要启用各个跟踪点并离线检查收集的跟踪。

使用您喜欢的搜索引擎来查找此类跟踪框架。

© www.soinside.com 2019 - 2024. All rights reserved.