A few days ago I have encountered a strange problem. When I copied IronPython.Modules.dll to my application's folder, it
freezed. Strange. It looked like a bug
in IronPython for me but it wasn't. With Dino Viehland help, I have found the
bug in Delphi code. Dino used WinDbg to discover what is going on in the
code. I show you it is not so hard to use it.
WinDbg is part of Debuging
Tolls for Windows. Download and install appropriate version for your
Windows (32 or 64 bit). And download the bugged
application.
The IpyTest.exe is Delphi 7 application that creates
the CLR and runs function Add3 from Host.dll inside the CLR. The Add3
function creates IronPython engine and returns result of adding number 3 to the
input variabl. So when you run IpyTest.exe you should
see
C:\IronPythonBug\Delphi>IpyTest.exe
CLRVersion = v2.0.50727
8 + 3 = 11
You may actually see it because this bug does not appear on all computers.
But on mine, I see just the CLRVersion. Then the program freezes.
Let's debug the application in WinDbg:
"C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" C:\IronPythonBug\Delphi\IpyTest.exe
When WinDbg and IpyTest.exe start, you see this:
Enter the following commands:
0:000> sxe clr
0:000> sxe av
0:000> .symfix
0:000> .reload
Reloading current modules
............
If you want to know what these commands do, check the help :-) Then run the
debugger with g command. It runs for a while and then
it freezes with the following output:
0:000> g
ModLoad: 76390000 763ad000 C:\WINDOWS\system32\IMM32.DLL
ModLoad: 79000000 79046000 C:\WINDOWS\system32\mscoree.dll
ModLoad: 77f60000 77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 79e70000 7a400000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
ModLoad: 78130000 781cb000 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca\MSVCR80.dll
ModLoad: 7c9c0000 7d1d7000 C:\WINDOWS\system32\shell32.dll
ModLoad: 773d0000 774d3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
ModLoad: 5d090000 5d12a000 C:\WINDOWS\system32\comctl32.dll
ModLoad: 790c0000 79bb7000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
ModLoad: 79060000 790bb000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
ModLoad: 33200000 3322c000 Microsoft.Scripting.dll
ModLoad: 68000000 68036000 C:\WINDOWS\system32\rsaenh.dll
ModLoad: 64020000 64033000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorsec.dll
ModLoad: 76c30000 76c5e000 C:\WINDOWS\system32\WINTRUST.dll
ModLoad: 77a80000 77b15000 C:\WINDOWS\system32\CRYPT32.dll
ModLoad: 77b20000 77b32000 C:\WINDOWS\system32\MSASN1.dll
ModLoad: 76c90000 76cb8000 C:\WINDOWS\system32\IMAGEHLP.dll
ModLoad: 74e30000 74e9d000 C:\WINDOWS\system32\RichEd20.dll
ModLoad: 04a30000 04cf5000 C:\WINDOWS\system32\xpsp2res.dll
ModLoad: 769c0000 76a74000 C:\WINDOWS\system32\userenv.dll
ModLoad: 5b860000 5b8b5000 C:\WINDOWS\system32\netapi32.dll
ModLoad: 75e60000 75e73000 C:\WINDOWS\system32\cryptnet.dll
ModLoad: 76bf0000 76bfb000 C:\WINDOWS\system32\PSAPI.DLL
ModLoad: 722b0000 722b5000 C:\WINDOWS\system32\SensApi.dll
ModLoad: 4d4f0000 4d549000 C:\WINDOWS\system32\WINHTTP.dll
ModLoad: 76f60000 76f8c000 C:\WINDOWS\system32\WLDAP32.dll
ModLoad: 33200000 3322c000 C:\IronPythonBug\Delphi\Microsoft.Scripting.dll
ModLoad: 34700000 34860000 IronPython.dll
ModLoad: 34700000 34860000 C:\IronPythonBug\Delphi\IronPython.dll
ModLoad: 33000000 33064000 Microsoft.Scripting.Core.dll
ModLoad: 33000000 33064000 C:\IronPythonBug\Delphi\Microsoft.Scripting.Core.dll
ModLoad: 7a440000 7abc5000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\80978a322d7dd39f0a71be1251ae395a\System.ni.dll
ModLoad: 33400000 334dc000 Microsoft.Dynamic.dll
ModLoad: 33400000 334dc000 C:\IronPythonBug\Delphi\Microsoft.Dynamic.dll
ModLoad: 73000000 73008000 Microsoft.Scripting.ExtensionAttribute.dll
ModLoad: 73000000 73008000 C:\IronPythonBug\Delphi\Microsoft.Scripting.ExtensionAttribute.dll
ModLoad: 34c10000 34c80000 IronPython.Modules.dll
ModLoad: 34c10000 34c80000 C:\IronPythonBug\Delphi\IronPython.Modules.dll
ModLoad: 64890000 64981000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Configuration\b82c00e2d24305ad6cb08556e3779b75\System.Configuration.ni.dll
ModLoad: 637a0000 63cd6000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\773a9786013451d3baaeff003dc4230f\System.Xml.ni.dll
(b6c.ef0): Unknown exception - code c0000091 (first chance)
>>> many lines omitted <<<
(b6c.ef0): Unknown exception - code c0000091 (first chance)
The IpyTest.exe window contains just a text:
CLRVersion = v2.0.50727. Break the debugger with Ctrl-Break. We
see there is an unknown exception with code c0000091. Let's restart the
program and tell WinDbg to stop on this exception with the following
commands:
.restart
sxe c0000091
.symfix
.reload
g
Here is the output:
0:003> .restart
CommandLine: C:\IronPythonBug\Delphi\IpyTest.exe
Symbol search path is: srv*
Executable search path is:
ModLoad: 00400000 00455000 image00400000
ModLoad: 7c900000 7c9af000 ntdll.dll
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll
ModLoad: 7e410000 7e4a1000 C:\WINDOWS\system32\user32.dll
ModLoad: 77f10000 77f59000 C:\WINDOWS\system32\GDI32.dll
ModLoad: 77dd0000 77e6b000 C:\WINDOWS\system32\advapi32.dll
ModLoad: 77e70000 77f02000 C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000 C:\WINDOWS\system32\Secur32.dll
ModLoad: 77120000 771ab000 C:\WINDOWS\system32\oleaut32.dll
ModLoad: 77c10000 77c68000 C:\WINDOWS\system32\msvcrt.dll
ModLoad: 774e0000 7761d000 C:\WINDOWS\system32\ole32.dll
ModLoad: 77c00000 77c08000 C:\WINDOWS\system32\version.dll
(ea8.a14): Break instruction exception - code 80000003 (first chance)
eax=00351ec4 ebx=7ffd4000 ecx=00000004 edx=00000010 esi=00351f98 edi=00351ec4
eip=7c90120e esp=0012fb20 ebp=0012fc94 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc int 3
0:000> sxe c0000091
0:000> .symfix
0:000> .reload
Reloading current modules
............
0:000> g
ModLoad: 76390000 763ad000 C:\WINDOWS\system32\IMM32.DLL
ModLoad: 79000000 79046000 C:\WINDOWS\system32\mscoree.dll
ModLoad: 77f60000 77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 79e70000 7a400000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
ModLoad: 78130000 781cb000 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca\MSVCR80.dll
ModLoad: 7c9c0000 7d1d7000 C:\WINDOWS\system32\shell32.dll
ModLoad: 773d0000 774d3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
ModLoad: 5d090000 5d12a000 C:\WINDOWS\system32\comctl32.dll
ModLoad: 790c0000 79bb7000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
ModLoad: 79060000 790bb000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
ModLoad: 33200000 3322c000 Microsoft.Scripting.dll
ModLoad: 68000000 68036000 C:\WINDOWS\system32\rsaenh.dll
ModLoad: 64020000 64033000 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorsec.dll
ModLoad: 76c30000 76c5e000 C:\WINDOWS\system32\WINTRUST.dll
ModLoad: 77a80000 77b15000 C:\WINDOWS\system32\CRYPT32.dll
ModLoad: 77b20000 77b32000 C:\WINDOWS\system32\MSASN1.dll
ModLoad: 76c90000 76cb8000 C:\WINDOWS\system32\IMAGEHLP.dll
ModLoad: 74e30000 74e9d000 C:\WINDOWS\system32\RichEd20.dll
ModLoad: 04a30000 04cf5000 C:\WINDOWS\system32\xpsp2res.dll
ModLoad: 769c0000 76a74000 C:\WINDOWS\system32\userenv.dll
ModLoad: 5b860000 5b8b5000 C:\WINDOWS\system32\netapi32.dll
ModLoad: 75e60000 75e73000 C:\WINDOWS\system32\cryptnet.dll
ModLoad: 76bf0000 76bfb000 C:\WINDOWS\system32\PSAPI.DLL
ModLoad: 722b0000 722b5000 C:\WINDOWS\system32\SensApi.dll
ModLoad: 4d4f0000 4d549000 C:\WINDOWS\system32\WINHTTP.dll
ModLoad: 76f60000 76f8c000 C:\WINDOWS\system32\WLDAP32.dll
ModLoad: 33200000 3322c000 C:\IronPythonBug\Delphi\Microsoft.Scripting.dll
ModLoad: 34700000 34860000 IronPython.dll
ModLoad: 34700000 34860000 C:\IronPythonBug\Delphi\IronPython.dll
ModLoad: 33000000 33064000 Microsoft.Scripting.Core.dll
ModLoad: 33000000 33064000 C:\IronPythonBug\Delphi\Microsoft.Scripting.Core.dll
ModLoad: 7a440000 7abc5000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\80978a322d7dd39f0a71be1251ae395a\System.ni.dll
ModLoad: 33400000 334dc000 Microsoft.Dynamic.dll
ModLoad: 33400000 334dc000 C:\IronPythonBug\Delphi\Microsoft.Dynamic.dll
ModLoad: 73000000 73008000 Microsoft.Scripting.ExtensionAttribute.dll
ModLoad: 73000000 73008000 C:\IronPythonBug\Delphi\Microsoft.Scripting.ExtensionAttribute.dll
ModLoad: 34c10000 34c80000 IronPython.Modules.dll
ModLoad: 34c10000 34c80000 C:\IronPythonBug\Delphi\IronPython.Modules.dll
ModLoad: 64890000 64981000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Configuration\b82c00e2d24305ad6cb08556e3779b75\System.Configuration.ni.dll
ModLoad: 637a0000 63cd6000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\773a9786013451d3baaeff003dc4230f\System.Xml.ni.dll
(ea8.a14): Unknown exception - code c0000091 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=ffffff00 ebx=02643d64 ecx=02640010 edx=02648e3c esi=02643bd4 edi=02640010
eip=79098f48 esp=0012ce30 ebp=0012ce34 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00010202
mscorjit!Compiler::FlatFPIsSameAsFloat+0xa:
79098f48 d945fc fld dword ptr [ebp-4] ss:0023:0012ce30=02640010
WinDbg stopped on the exception. Nice. And what now? Analyze the exception!
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify checksum for C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
*** WARNING: Unable to verify checksum for image00400000
*** ERROR: Module load completed but symbols could not be loaded for image00400000
*** ERROR: Module load completed but symbols could not be loaded for C:\WINDOWS\system32\xpsp2res.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\Microsoft.Scripting.Core.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\Microsoft.Scripting.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\Microsoft.Dynamic.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\IronPython.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\IronPython.Modules.dll
*** WARNING: Unable to verify checksum for C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Xml\773a9786013451d3baaeff003dc4230f\System.Xml.ni.dll
*** WARNING: Unable to verify checksum for C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System.Configuration\b82c00e2d24305ad6cb08556e3779b75\System.Configuration.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\IronPythonBug\Delphi\Microsoft.Scripting.ExtensionAttribute.dll
*** WARNING: Unable to verify checksum for C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\80978a322d7dd39f0a71be1251ae395a\System.ni.dll
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: kernel32!pNlsUserInfo ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: kernel32!pNlsUserInfo ***
*** ***
*************************************************************************
FAULTING_IP:
mscorjit!Compiler::FlatFPIsSameAsFloat+7
79098f45 d95dfc fstp dword ptr [ebp-4]
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 79098f45 (mscorjit!Compiler::FlatFPIsSameAsFloat+0x00000007)
ExceptionCode: c0000091
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 00000000
FAULTING_THREAD: 00000a14
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
PROCESS_NAME: image00400000
ERROR_CODE: (NTSTATUS) 0xc0000091 - {EXCEPTION} Floating-point overflow.
EXCEPTION_CODE: (NTSTATUS) 0xc0000091 - {EXCEPTION} Floating-point overflow.
EXCEPTION_PARAMETER1: 00000000
NTGLOBALFLAG: 2000000
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK:
(TransitionMU)
0012E0F8 02657F5C IronPython!IronPython.Runtime.PythonContext.InitializeSystemState()+0xec
0012E108 026532E7 IronPython!IronPython.Runtime.PythonContext..ctor(Microsoft.Scripting.Runtime.ScriptDomainManager, System.Collections.Generic.IDictionary`2)+0x247
(TransitionUM)
(TransitionMU)
0012E60C 792EF7C0 mscorlib_ni!System.RuntimeMethodHandle.InvokeConstructor(System.Object[], System.SignatureStruct, System.RuntimeTypeHandle)+0x10
0012E640 792EF55A mscorlib_ni!System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xfa
0012E6D0 79288D96 mscorlib_ni!System.RuntimeType.CreateInstanceImpl(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])+0x3e6
0012E730 79280E10 mscorlib_ni!System.Activator.CreateInstance(System.Type, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])+0x70
0012E754 02652BA1 Microsoft_Scripting!Microsoft.Scripting.Runtime.LanguageConfiguration.LoadLanguageContext(Microsoft.Scripting.Runtime.ScriptDomainManager, Boolean ByRef)+0x
LAST_CONTROL_TRANSFER: from 790a40fa to 79098f48
PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS
BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS
STACK_TEXT:
79098f45 mscorjit!Compiler::FlatFPIsSameAsFloat+0x7
FOLLOWUP_IP:
mscorjit!Compiler::FlatFPIsSameAsFloat+7
79098f45 d95dfc fstp dword ptr [ebp-4]
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: mscorjit!Compiler::FlatFPIsSameAsFloat+7
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: mscorjit
IMAGE_NAME: mscorjit.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 492b8341
STACK_COMMAND: dds 79098f45 ; kb
FAILURE_BUCKET_ID: WRONG_SYMBOLS_c0000091_mscorjit.dll!Compiler::FlatFPIsSameAsFloat
BUCKET_ID: APPLICATION_FAULT_WRONG_SYMBOLS_mscorjit!Compiler::FlatFPIsSameAsFloat+7
Followup: MachineOwner
---------
Floating-point overflow in Delphi when working with foreign .dlls?
Ask uncle Google about it and after a while you find something like this.
Or, as in my case, Dino sends you the direct link :-)
Another useful commands:
.loadby sos mscorwks
!clrstack -a
!DumpStackObjects
!dumpobj 07d996fc
.load C:\Program Files (x86)\Microsoft Silverlight\3.0.40818.0\sos.dll
.load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll
.sympath SRV*c:\dos\DebugSymbols*http://msdl.microsoft.com/download/symbols
To recap it:
If you have a problem with your program, run it in WinDbg and !analyze -v it. WinDbg tells you a lot of useful
information which you can utilize and find a solution for your problem.