Ale*_*mes 4 delphi debugging pointers delphi-7
Evaluate/Modify如果你检查 Delphi弹出窗口中的接口指针(Ctrl-F7),它会显示类似以下内容:
指针($656E84)作为IConnectionPoint
我的问题是,调试器从哪里获取“as IConnectionPoint”或其他内容,iow
a) 它如何知道指针引用的接口类型;和
b) 调试器在哪里(以及通过什么过程)获取其描述文本,例如IConnectionPoint?
我想知道调试器是否通过某种方式查询指针所持有的接口来管理这些事情。但是,IInterface(这是调试器报告的内容IUnknown)只有QueryInterface,_AddRef并且_Release methods我看不到如何从其中任何一个中获取信息。同样,我看不出调试器如何从指针的“历史”中获取信息,因为它引用的对象不需要首先在 Delphi 应用程序中创建。
它如何知道指针引用的接口类型?
调试器可以访问调试信息。
调试器从哪里(以及通过什么过程)获取其描述文本?
来自编译器创建的单独文件(通常是一个.map文件)。
编译器还可以在 exe 本身中包含调试信息。这就是调试 exe 比发布 exe 大得多的原因。
变量在(包含的)映射文件/资源中定义。
调试信息还将汇编代码链接到源文件中的行。
这就是调试器如何知道您正在执行哪一行源代码的方式;它知道 CPU 所在的地址,并在文件中查找该地址.map以查找源文件的行号和名称。
您可以要求链接器(将所有 dcu 和其他文件组合到一个 exe 中的过程)在 exe 中包含调试信息或创建单独的 .map 文件。
Project-> options -> Linking
您可以在对话框中更改调试设置project -> Options... -> Compiling。
[是否]调试器[...]查询指针所持有的接口?
调试器不会在运行时调用您的代码来确定变量的类型。事实上,除非您明确告诉它这样做,否则它不会调用您的任何代码。
如果这样做的话那就很糟糕了,因为可能会产生副作用。
评估代码
如果您希望调试器调用您的代码,您可以使用Evaluate/modify选项或监视列表强制它这样做。
评估/修改
Evaluate是一次性评估。
手表
选择:debug -> add watch at cursor. Watch当您单步执行代码时,它会跟踪您的表情。您可以通过右键单击监视项并选择“edit watch...
此处”来编辑监视列表中的表达式,您还可以强制调试器调用您的函数。