![]() |
1
6
您可以通过调试检查器获取地址。要获取字段的地址,请在更改发生之前的某个时间点(例如,在调用构造函数之后)在代码中放置一个断点。然后在调试检查器中打开对象。不确定如何以旧的IDE样式获得它,但在D2010中,您可以从运行中获得它->检查…菜单命令,从“评估/修改”中的按钮,或按键盘上的alt-f5。(小心不要按ALT-F4!) 调试检查器将向您显示对象及其所有字段。双击其中一个字段,它将在新的调试检查器窗口中打开。在编辑框中,如顶部的栏将是您的字段地址。您可以使用它设置内存断点,以查找值的更改位置。 |
![]() |
2
4
在Delphi5中不确定,但您应该能够将数据断点(或地址断点)放在您的aeexample.fonchange上。
|
![]() |
3
3
既然你不能使用fran_ois建议的智能解决方案,现在是黑客攻击的时候了!在某个地方,任何可以放置制动点的地方,编写如下代码:
在x.onchange:=nil行上放置一个brakepoint;当调试器停在那里时,查看“反汇编”窗格,您将看到如下内容:
你不关心编译器使用的寄存器,你关心288美元,第一条MOV指令使用的偏移量。这是从“x”地址到fonchange字段的偏移量。记下来。现在回到bugy程序,在某个地方设置一个brakepoint,点击alt+f5调用调试检查器(如果没有空的编辑框输入查询,则按ctrl+n),然后写“integer(myexamplevariable)”;无论得到什么,都要加上在上一步中记下的数字,并得到fonchange的地址。对于myExampleVariable实例,现在可以设置地址brakepoint。 |
![]() |
4
1
我不知道Delphi5中是否有,但是类型 TMethod 以及功能 MethodAddress 应该会有帮助。 |
![]() |
5
0
我可以回答那一点-你是!或者您所看到的实例不正确?引用不正确?会是那样的。Delphi调试器擅长使不存在的东西看起来像它所做的那样,直到… 退后一点,试着看木头而不是树。我去过你很多次的地方,你可能是大错特错了(不好意思,双关语是故意的),很快就会给自己起各种各样的名字。 |
![]() |
SRobertJames · 使用printf的gdb显示 1 年前 |
|
Subin · 在vscode中运行c时出错 1 年前 |
![]() |
Community wiki · 如何调试Python内存故障? 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |