如何从Delphi程序或编译器生成的调试信息中提取局部变量信息(地
我的目标是:
>给定一个挂起的线程在Delphi编译的32或64位Windows程序中,走堆栈(doable) 第一个是罚款,这是这个问题的第二个。在高级别,你如何在Delphi中枚举局部变量给一个堆栈条目? 在低水平,这是我一直在调查: RTTI:不列出这种方法的信息。这不是我实际上认为是一个现实的选择,但在这里无论如何。 调试信息:加载为调试版本生成的调试信息。 >地图文件:即使是详细的地图文件(一个文本格式的文件!打开一个看看)不包含本地变量信息。它基本上是一个地址和源文件行号的列表。伟大的地址文件和线相关,例如。在沟槽中的蓝点;不是很好的更详细的信息 我遇到的问题是: >没有TD32文件格式的文档(我可以找到。) 如果这是正确的方法,那么这个问题变成“有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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |