我的目标是:
第一个很好,这是这个问题的第二个。在较高的级别上,在给定Delphi中的堆栈条目的情况下,如何枚举局部变量?
从低层次看,这就是我一直在研究的内容:
RTTI:未列出有关方法的此类信息。我实际上从未想到过这是一个现实的选择,但无论如何都要在此处列出。
调试信息:加载为调试版本生成的调试信息。
我在这里遇到的问题是:
如果这是正确的方法,那么这个问题将变成“是否存在有关TDS / TD32文件格式的文档,并且是否有任何代码示例加载局部变量?”
代码示例不是必不可少的,但即使非常少也可能非常有用。
最佳答案
检查是否有任何调试符号不是二进制的。
也可以使用GDB(在Windows上为
它)。如果找到.dbg或.dSYM,那就太好了
文件。它们包含源代码,例如。
gdb> list foo
56 void foo()
57 {
58 bar();
59 sighandler_t fnc = signal(SIGHUP, SIG_IGN);
60 raise(SIGHUP);
61 signal(SIGHUP, fnc);
62 baz(fnc);
63 }
如果没有任何调试文件,则可以尝试获取MinGW或Cygwin,并使用nm(1)(man page)。它将从二进制文件中读取符号名称。它们可能包含一些类型,例如C++类型:
int abc::def::Ghi::jkl(const std::string, int, const void*)
然后不要忘记添加
--demangle
选项,否则您将得到类似以下内容的信息:__ZN11MRasterFont21getRasterForCharacterEh
代替:
MRasterFont::getRasterForCharacter(unsigned char)