【问题标题】:Getting variables by scope按范围获取变量
【发布时间】:2011-10-01 15:41:35
【问题描述】:

C++中的函数是否可以找到某个范围内所有变量的地址?我说的是诸如扫描程序使用的内存或查看编译器的解析树之类的方法。也许在 C++11 中甚至为它添加了一种机制。

这是我一直想知道一段时间的事情,我们将不胜感激。

谢谢。

注意:代码应该从程序内部调用。

【问题讨论】:

  • 你打算用这个做什么?
  • 这更像是一个普遍感兴趣的问题,但我能想到的一件事是某种可以在循环中用于跟踪变量的日志记录函数。
  • 那我就拒绝了。有一些有用的方法可以进行日志记录,但您无法访问函数变量,除非您在函数范围内访问它们。
  • C++ 中的变量不一定会成为机器代码中的清单实体。常量可以直接折叠到代码中,如果循环展开或替换,循环计数器可能会被删除。相反,可能存在隐藏变量,例如用于静态变量初始化。参考文献可能会或可能会出现。情况很微妙。
  • 如果 gdb 能够解决这个问题,那么我想这是可能的。然而,问题可能是有多少工作量。我想围绕 gdb 编写一些脚本会是一个更好的主意。根据我所阅读的内容,它非常可编写脚本和自定义。

标签: c++ variables scope


【解决方案1】:

这是所有调试器都可以做的事情,所以我认为如果程序使用调试信息编译并且可以以某种方式解析自己的符号表,那么我认为程序有可能获得那种级别的自省。

This project 实现了调试信息解析以生成 C++ 的类自省。我想同样的方法也适用于您的目的。

另外,如果您使用优化进行编译,我怀疑这是否可行,因为优化器可能会更改您的代码,以至于从源代码中的各个变量到内存位置的映射不存在。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多