gpt4 book ai didi

带接口(interface)指针的 Delphi 调试器功能

转载 作者:行者123 更新时间:2023-12-03 15:28:24 25 4
gpt4 key购买 nike

如果您在 Delphi 的 Evaluate/Modify 弹出窗口 (Ctrl-F7) 中检查接口(interface)指针,它会显示类似以下内容:

Pointer($656E84) as IConnectionPoint

我的问题是,调试器从哪里获取“as IConnectionPoint”或其他内容,iow

a) 它如何知道指针引用的接口(interface)类型;和

b) 调试器在哪里(以及通过什么过程)获取其描述文本,例如IConnectionPoint

我想知道调试器是否通过某种方式查询指针所持有的接口(interface)来管理这些事情。但是,IInterface(调试器报告 IUnknown 的内容)只有 QueryInterface_AddRef >_Release 方法,我看不出如何从这些方法中获取信息。同样,我看不出调试器如何从指针的“历史”中获取信息,因为它引用的对象不需要首先在 Delphi 应用程序中创建。

最佳答案

How does it know what type of interface the pointer is referencing?

调试器可以访问调试信息。

Where (and by what process) does the debugger get the text of its description?

来自编译器创建的单独文件(通常是 .map 文件)。
编译器还可以在 exe 本身中包含调试信息。这就是调试 exe 比发布 exe 大得多的原因。

变量在(包含的)映射文件/资源​​中定义。
调试信息还将汇编代码链接到源文件中的行。
这就是调试器如何知道您正在执行哪一行源代码的方式;它知道 CPU 所在的地址,并在 .map 文件中查找该地址以查找源文件的行号和名称。

您可以要求链接器(将所有 dcu 和其他文件组合到一个 exe 中的过程)在 exe 中包含调试信息或创建单独的 .map 文件。
项目->选项->链接

enter image description here

您可以在项目 -> 选项... -> 编译 对话框中更改调试设置。

enter image description here

[does] the debugger [...] query the interface the pointer is holding?

调试器不会调用您的代码来确定运行时变量的类型。事实上,除非您明确告诉它这样做,否则它不会调用您的任何代码。
如果这样做的话那就很糟糕了,因为可能会产生副作用。

评估您的代码
如果您希望调试器调用您的代码,您可以使用Evaluate/modify选项或监视列表强制它这样做。

评估/修改
Evaluate 是一次性评估。

enter image description here

watch
选择:调试 -> 在光标处添加监视。当您单步执行代码时,Watch 会跟踪您的表情。您可以通过右键单击监视项并选择编辑监视...
来编辑监视列表中的表达式在这里您还可以强制调试器调用您的函数。

enter image description here

关于带接口(interface)指针的 Delphi 调试器功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com