kob*_*bik 10 delphi debugging initialization delphi-5
Application创建实例的位置和时间?(同样适用于Screen实例).
我在部分Forms或 System initialization部分没有看到任何内容.
在之前的CPU窗口中Application.Initialize,我看到了对@_InitExe(SysInit)的调用- 它导致了_StartExe(系统)和大量的asm代码 - Application据我所知,这并没有创建实例.
我在这里错过了什么?
Dav*_*nan 13
从代码中解决这个问题很容易.你只需要进行文本搜索TApplication.Create.例如,使用IDE的"在文件中查找"功能.
但是你总是可以懒惰并让调试人员去做.
TApplication.Create.程序中断时,查看调用堆栈.您将看到该TApplication对象是从单元中实例化InitControls的Controls.并且InitControls从单元的initialization部分调用Controls.
普通Villa VCL应用程序的完整调用堆栈如下所示:
Vcl.Forms.TApplication.Create(nil) Vcl.Controls.InitControls Vcl.Controls.Vcl.Controls System.InitUnits System._StartExe(???,???) SysInit._InitExe($5A81BC) Project1.Project1 :749933aa kernel32.BaseThreadInitThunk + 0x12 :76f09ef2 ntdll.RtlInitializeExceptionChain + 0x63 :76f09ec5 ntdll.RtlInitializeExceptionChain + 0x36
做同样的事情TScreen.Create,你会看到TScreen对象也被实例化了InitControls().
我不会试图解释所有这一切.我认为这里有足够的信息和建议供您从这里开始工作.虽然这是来自XE3应用程序的调用堆栈,但对于Delphi 5应用程序来说它看起来是一样的.
jac*_*ate 12
Application实例是在Vcl.Controls.pas单元的InitControls过程中创建的.
procedure InitControls;
begin
...
Application := TApplication.Create(nil);
...
Run Code Online (Sandbox Code Playgroud)
InitControls在同一单元的初始化部分中调用:
initialization
...
InitControls;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |