Exception in __startup

From: Leroy Casterline (casterle_at_ccltd.com)
Date: 02/10/05

  • Next message: John O'Harrow: "Re: Some MM challenge musings"
    Date: Thu, 10 Feb 2005 15:00:40 -0700
    
    

    Once again I turn to the experts in .basm for help with a BCB issue.

    Here is a message I posted to the madExcept newsgroup earlier. Below the
    exception report is a 2nd follow-up message with more information.

    I hope someone can give me an idea how to tackle this problem as I can't
    reproduce it here.

    Also, is there a way to force a core dump that will help me find the
    problem?

    TIA!

    =======================================================
    =======================================================
    1st message
    =======================================================
    =======================================================

    Yesterday, my program was shipped to an engineer in Finland. When
    starting the program he got the following exception. The program is
    still in beta, and this is the first time it's been executed on a
    Win2K system.

    I've never seen this one before, it appears to be occurring in my
    startup code, which jibes with my map file. According to the map file,
    __startup lives in cp32mt.lib. Disassembling the startup object in
    cp32mt.lib shows the line causing the exception to be:

    call dword ptr [esi+18h]

    which, I would guess is calling the initialization code of something.
    So:

     1) How do I figure out what's being called?
     2) Is there some way that I can have madExcept create a
        core dump file that I could then analyze?
     3) What other approach might I take to finding the problem?

    BCB6 w/lots of 3rd party controls.

    Thanks for any insight you can provide.

    date/time : 2005-02-10 18:53
    computer name : CPASFI1
    user name : cpasfi
    operating system : Windows 2000 Service Pack 4 build 2195
    system language : English
    system up time : 1 hour 49 minutes
    program up time : 1 second
    processor : Intel(R) Pentium(R) 4 CPU 2.80GHz
    physical memory : 155/254 MB (free/total)
    free disk space : (C:) 2,46 GB
    display mode : 1600x1200, 32 bit
    process id : $6c0
    executable : DVS926PwrMon.exe
    exec. date/time : 2005-02-08 15:40
    version : 1.0.28.46
    madExcept version : 2.7f beta 2
    exception class : EVariantTypeCastError
    exception message : Could not convert variant of type (String) into type
    (Double).

    main thread ($6c4):
    00000000 ???
    009c4fec DVS926PwrMon.exe __startup

    thread $674:
    77f82870 ntdll.dll NtWaitForSingleObject
    7c599fe2 KERNEL32.dll WaitForSingleObjectEx
    7c57b3d6 KERNEL32.dll WaitForSingleObject
    004bb88e DVS926PwrMon.exe nxllMemoryManager _16459
    00927fb0 DVS926PwrMon.exe system 11218 ThreadWrapper

    thread $6b4:
    77f8287e ntdll.dll
    NtWaitForMultipleObjects
    7c59a1ad KERNEL32.dll
    WaitForMultipleObjectsEx
    7c59a0bd KERNEL32.dll WaitForMultipleObjects
    004ad014 DVS926PwrMon.exe nxsrFileImplWin32 _16473
    004ace77 DVS926PwrMon.exe nxsrFileImplWin32 _16470
    004acc60 DVS926PwrMon.exe nxsrFileImplWin32 _16467
    00927fb0 DVS926PwrMon.exe system 11218 ThreadWrapper

    modules:
    00400000 DVS926PwrMon.exe 1.0.28.46 C:\Program
    Files\DVS926PowerMonitor
    20000000 RXCTRL.dll 9.0.137.0 C:\Program Files\Reflection
    22000000 PGPhk.dll 6.5.3.0 C:\WINNT\system32
    6b2c0000 msimg32.dll 5.0.2180.1 C:\WINNT\system32
    6e420000 INDICDLL.dll 5.0.2920.0 C:\WINNT\system32
    70a70000 SHLWAPI.DLL 6.0.2800.1584 C:\WINNT\system32
    71710000 COMCTL32.DLL 5.81.4916.400 C:\WINNT\system32
    75020000 WS2HELP.DLL 5.0.2134.1 C:\WINNT\system32
    75030000 WS2_32.DLL 5.0.2195.6601 C:\WINNT\system32
    75050000 WSOCK32.DLL 5.0.2195.6603 C:\WINNT\system32
    759b0000 LZ32.DLL 5.0.2195.6611 C:\WINNT\system32
    75e60000 IMM32.dll 5.0.2195.6655 C:\WINNT\system32
    76620000 MPR.DLL 5.0.2195.6824 C:\WINNT\system32
    76b30000 COMDLG32.DLL 5.0.3700.6693 C:\WINNT\system32
    77570000 WINMM.DLL 5.0.2161.1 C:\WINNT\system32
    77800000 WINSPOOL.DRV 5.0.2195.6659 C:\WINNT\system32
    77820000 VERSION.DLL 5.0.2195.6623 C:\WINNT\system32
    77880000 SETUPAPI.DLL 5.0.2195.6622 C:\WINNT\system32
    779b0000 OLEAUT32.DLL 2.40.4522.0 C:\WINNT\system32
    77a50000 OLE32.DLL 5.0.2195.6906 C:\WINNT\system32
    77d30000 RPCRT4.DLL 5.0.2195.6904 C:\WINNT\system32
    77e10000 USER32.dll 5.0.2195.7017 C:\WINNT\system32
    77f40000 GDI32.DLL 5.0.2195.6945 C:\WINNT\system32
    77f80000 ntdll.dll 5.0.2195.6899 C:\WINNT\system32
    78000000 MSVCRT.DLL 6.1.9844.0 C:\WINNT\system32
    782f0000 SHELL32.DLL 5.0.3900.6975 C:\WINNT\system32
    7c0f0000 USERENV.DLL 5.0.2195.6794 C:\WINNT\system32
    7c2d0000 ADVAPI32.DLL 5.0.2195.6876 C:\WINNT\system32
    7c570000 KERNEL32.dll 5.0.2195.6946 C:\WINNT\system32

    =======================================================
    =======================================================
    2nd message
    =======================================================
    =======================================================

    >call dword ptr [esi+18h]

    It turns out that this is a call to WinMain (at least on my machine).
    That being the case, I wonder if the exception really occurred in
    __startup after all.

    Perhaps on the client's machine it was a call to somewhere else? Surely
    not on purpose, but if ESI were corrupted I guess this could happen. But
    in that case I wouldn't expect it to hit something that would raise the
    reported exception - that would be a chance in a million, no?

    In the exception report, I had ignored the first line as meaningless.

    main thread ($6c4):
    00000000 ???
    009c4fec DVS926PwrMon.exe __startup

    Perhaps it's not. But it doesn't seem likely that the exception:

    exception class : EVariantTypeCastError
    exception message : Could not convert variant of type (String) into type
    (Double).

    was thrown at address 00000000 does it? I would expect some kind of
    access violation if I were trying to execute at that address.

    What does the 00000000 ??? mean, anyway?

    On the other hand, if I had executed into WinMain and the exception was
    thrown subsequently, wouldn't I see WinMain (and anything else I'd
    executed into) on the stack?


  • Next message: John O'Harrow: "Re: Some MM challenge musings"

    Relevant Pages

    • Fehlermeldung von MAD
      ... exception class: EAccessViolation ... 00490ee2 +3e livestyler.exe ComCtrls TCustomTabControl.Destroy ... 77f4c522 +0a ntdll.dll NtWaitForMultipleObjects ... 0044ca95 +0d livestyler.exe madExcept CallThreadProcSafe ...
      (de.comp.lang.delphi.misc)
    • ANN: madExcept 2.7d
      ... Today I'm releasing madExcept 2.7d. ... several patches to improve overall BCB support ... bug reports don't get cut off, ... madExcept takes full control over Delphi's exception handling. ...
      (borland.public.delphi.thirdpartytools.general)
    • Exception beim Beenden meiner Applikation
      ... Meine Applikation wirft auf diversen Kundenrechnern eine EAccessViolation. ... Von Madexcept erhalte ich diesen Output: ... exception class: EAccessViolation ... Lesen von Adresse 00000008. ...
      (de.comp.lang.delphi.misc)
    • ANN: madExcept 2.7e - with Delphi 2005 support
      ... Today I'm releasing madExcept 2.7e. ... official support for Delphi 2005 - only for the win32 part ... madExcept takes full control over Delphi's exception handling. ... integrated email functionality. ...
      (borland.public.delphi.thirdpartytools.general)
    • ANN: madExcept 2.7g
      ... Today I'm releasing madExcept 2.7g. ... madExcept takes full control over Delphi's exception handling. ... get a detailed bug report including a full callstack of all ... integrated email functionality. ...
      (borland.public.delphi.thirdpartytools.general)