Всем привет!
Короче ситуация такая. Мы готовим свою систему на сертификацию под Vista, в
принципе PreTest ПОЧТИ прошли,
из 32 тестов завалили один. Исправить его не можем, так как все концы уводят
в fbembed.dll, поэтому взываю о помощи
присутствующих здесь разработчиков! Времени на сертификацию остается все
меньше и меньше...
Итак, ситуация:
Для подключения приложения к базе данных используется Firebird Emdedded -
fbembed.dll версия
2.0.0.12748, пробовали и на 2.0.1.12855 - в итоге то же самое.
1. Запускаю командную строку Windows cmd.exe c правами администратора
2. Выполняю регистрацию дебаггера Windbg: 7.7.0005.0 в системе командой:
windbg - I
3. Запускаю Microsoft Application Verifier 3.2.0038.
4. Добавляю приложение, которое работает с базой данных через fbembed.dll,
через меню
File/ Add application (например town).
5. В окне Tests выбираю Basics
6. Запускаю приложение.
7. В момент закрытия приложения запускается Windbg и выводит следующий лог:
Microsoft (R) Windows Debugger Version 6.7.0005.0
Copyright (c) Microsoft Corporation. All rights reserved.
*** wait with pending attach
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 00400000 00428000 C:\Program Files\CapitalCSE42_full\town.exe
ModLoad: 77a20000 77b3e000 C:\Windows\system32\ntdll.dll
ModLoad: 72e60000 72e91000 C:\Windows\system32\verifier.dll
ModLoad: 6e2b0000 6e2d0000 C:\Windows\system32\vrfcore.dll
ModLoad: 6e230000 6e269000 C:\Windows\system32\vfbasics.dll
ModLoad: 77940000 77a18000 C:\Windows\system32\kernel32.dll
ModLoad: 40000000 400ad000 C:\Program Files\CapitalCSE42_full\rtl60.bpl
ModLoad: 76330000 763ce000 C:\Windows\system32\user32.dll
ModLoad: 777a0000 777eb000 C:\Windows\system32\GDI32.dll
ModLoad: 77580000 7763f000 C:\Windows\system32\ADVAPI32.dll
ModLoad: 763d0000 76493000 C:\Windows\system32\RPCRT4.dll
ModLoad: 76a20000 76aac000 C:\Windows\system32\oleaut32.dll
ModLoad: 768d0000 76a14000 C:\Windows\system32\ole32.dll
ModLoad: 765c0000 7666a000 C:\Windows\system32\msvcrt.dll
ModLoad: 75d30000 75d44000 C:\Windows\system32\mpr.dll
ModLoad: 747a0000 747a7000 C:\Windows\system32\wsock32.dll
ModLoad: 764a0000 764cd000 C:\Windows\system32\WS2_32.dll
ModLoad: 77b60000 77b66000 C:\Windows\system32\NSI.dll
ModLoad: 400b0000 401f9000 C:\Program Files\CapitalCSE42_full\vcl60.bpl
ModLoad: 759b0000 759b8000 C:\Windows\system32\version.dll
ModLoad: 75080000 75214000
C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6000.16386_none_5d07289e07e1d100\comctl32.dll
ModLoad: 76560000 765b5000 C:\Windows\system32\SHLWAPI.dll
ModLoad: 73df0000 73e31000 C:\Windows\system32\winspool.drv
ModLoad: 777f0000 77864000 C:\Windows\system32\comdlg32.dll
ModLoad: 76ab0000 7757e000 C:\Windows\system32\SHELL32.dll
ModLoad: 74780000 7479c000 C:\Windows\system32\oledlg.dll
ModLoad: 02c80000 02e95000 C:\Program Files\CapitalCSE42_full\G_cap.bpl
ModLoad: 40310000 40355000 C:\Program Files\CapitalCSE42_full\dbrtl60.bpl
ModLoad: 00350000 00392000 C:\Program Files\CapitalCSE42_full\bdebrd.bpl
ModLoad: 402d0000 40308000 C:\Program Files\CapitalCSE42_full\dsnap60.bpl
ModLoad: 72fd0000 72fd5000 C:\Windows\system32\SHFolder.dll
ModLoad: 020f0000 021a0000 C:\Program
Files\CapitalCSE42_full\designide60.bpl
ModLoad: 72ee0000 72ef8000 C:\Windows\system32\olepro32.dll
ModLoad: 02ea0000 03000000 C:\Program Files\CapitalCSE42_full\g_lib.bpl
ModLoad: 003a0000 003d5000 C:\Program Files\CapitalCSE42_full\tdbf.bpl
ModLoad: 01430000 0146a000 C:\Program Files\CapitalCSE42_full\vclx60.bpl
ModLoad: 74e10000 74e43000 C:\Windows\system32\winmm.dll
ModLoad: 74dd0000 74e08000 C:\Windows\system32\OLEACC.dll
ModLoad: 40670000 406b6000 C:\Program Files\CapitalCSE42_full\vcldb60.bpl
ModLoad: 40860000 40875000 C:\Program Files\CapitalCSE42_full\VclSmp60.bpl
ModLoad: 504f0000 506b2000 C:\Program
Files\CapitalCSE42_full\dclOffice2k60.bpl
ModLoad: 014f0000 0153c000 C:\Program Files\CapitalCSE42_full\goalp.bpl
ModLoad: 003e0000 003f8000 C:\Program Files\CapitalCSE42_full\langs.bpl
ModLoad: 03100000 03146000 C:\Program
Files\CapitalCSE42_full\Form_Designer.bpl
ModLoad: 03150000 0321c000 C:\Program Files\CapitalCSE42_full\DBServ.bpl
ModLoad: 01470000 01488000 C:\Program Files\CapitalCSE42_full\g_net.bpl
ModLoad: 40250000 4028b000 C:\Program Files\CapitalCSE42_full\vclie60.bpl
ModLoad: 03320000 033e4000 C:\Program Files\CapitalCSE42_full\g_dlg.bpl
ModLoad: 40230000 4024d000 C:\Program Files\CapitalCSE42_full\vcljpg60.bpl
ModLoad: 77c40000 77c5e000 C:\Windows\system32\IMM32.DLL
ModLoad: 77b70000 77c37000 C:\Windows\system32\MSCTF.dll
ModLoad: 77b50000 77b59000 C:\Windows\system32\LPK.DLL
ModLoad: 766c0000 7673d000 C:\Windows\system32\USP10.dll
ModLoad: 75380000 753bf000 C:\Windows\system32\uxtheme.dll
ModLoad: 03df0000 03e30000 C:\Program Files\CapitalCSE42_full\ib2ora.dll
ModLoad: 10000000 1000c000 C:\Program Files\VMware\VMware Tools\hook.dll
ModLoad: 76190000 761ae000 C:\Windows\system32\USERENV.dll
ModLoad: 76170000 76184000 C:\Windows\system32\Secur32.dll
ModLoad: 06e50000 06e9f000 C:\Program Files\CapitalCSE42_full\glsystem.bpl
ModLoad: 06ea0000 06ecb000 C:\Program Files\CapitalCSE42_full\g_rp.bpl
ModLoad: 07010000 0704a000 C:\Program
Files\CapitalCSE42_full\glclasses.bpl
ModLoad: 07290000 072e7000 C:\Program
Files\CapitalCSE42_full\glGBOCommon.bpl
ModLoad: 07430000 0743e000 C:\Program Files\CapitalCSE42_full\glGBONet.bpl
ModLoad: 07540000 0754a000 C:\Program Files\CapitalCSE42_full\glMath.bpl
ModLoad: 50060000 500af000 C:\Program Files\CapitalCSE42_full\dclstd60.bpl
ModLoad: 07670000 076a6000 C:\Program Files\CapitalCSE42_full\dcldb60.bpl
ModLoad: 076b0000 0771d000 C:\Program
Files\CapitalCSE42_full\designdgm60.bpl
ModLoad: 4dae0000 4db31000 C:\Program Files\CapitalCSE41Demo\midas.dll
ModLoad: 07a70000 07a96000 C:\Program Files\CapitalCSE42_full\dbexpfb.dll
ModLoad: 085e0000 087d4000 C:\Program Files\CapitalCSE42_full\FBCLIENT.DLL
ModLoad: 7c3a0000 7c41b000 C:\Program Files\CapitalCSE42_full\MSVCP71.dll
ModLoad: 7c340000 7c396000 C:\Program Files\CapitalCSE42_full\MSVCR71.dll
ModLoad: 4a800000 4a886000 C:\Program Files\CapitalCSE42_full\icuuc30.dll
ModLoad: 4ad00000 4ae10000 C:\Program Files\CapitalCSE42_full\icudt30.dll
ModLoad: 4a900000 4a931000 C:\Program Files\CapitalCSE42_full\icuin30.dll
ModLoad: 75650000 75671000 C:\Windows\system32\NTMARTA.DLL
ModLoad: 76670000 766b9000 C:\Windows\system32\WLDAP32.dll
ModLoad: 762d0000 762d7000 C:\Windows\system32\PSAPI.DLL
ModLoad: 75da0000 75db1000 C:\Windows\system32\SAMLIB.dll
ModLoad: 088e0000 08987000 C:\Program
Files\CapitalCSE42_full\intl\fbintl.dll
ModLoad: 08990000 08a03000 C:\Program
Files\CapitalCSE42_full\plugins\bc1cplug.dll
ModLoad: 76050000 760af000 C:\Windows\system32\SXS.DLL
ModLoad: 08b90000 08bfd000 C:\Program
Files\CapitalCSE42_full\plugins\bcsberplug.dll
ModLoad: 6db10000 6dbc9000
C:\Windows\system32\spool\DRIVERS\W32X86\3\unidrvui.dll
(e50.1ac): Break instruction exception - code 80000003 (first chance)
eax=000001ff ebx=6e24772c ecx=77a414cd edx=00000000 esi=00000000
edi=000001ff
eip=77a62ea8 esp=0012f8ac ebp=0012faa8 iopl=0 nv up ei pl nz na po
nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000
efl=00000202
*** ERROR: Symbol file could not be found. Defaulted to export symbols for
C:\Windows\system32\ntdll.dll -
ntdll!DbgBreakPoint:
77a62ea8 cc int 3
8. Если посмотреть лог в Application Verifier для приложения town - видим
следующую ошибку:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
- <avrf:logfile xmlns:avrf="Application Verifier">
- <avrf:logSession TimeStarted="2007-05-16 : 14:57:40" PID="3664"
Version="1">
- <avrf:logEntry Time="2007-05-16 : 14:58:09" LayerName="Locks"
StopCode="0x201" Severity="Error">
<avrf:message>Unloading DLL containing an active critical
section.</avrf:message>
<avrf:parameter1>9fa9c90 - Critical section address.</avrf:parameter1>
<avrf:parameter2>4723e4 - Critical section initialization stack
trace.</avrf:parameter2>
<avrf:parameter3>58eefe6 - DLL name address.</avrf:parameter3>
<avrf:parameter4>9f80000 - DLL base address.</avrf:parameter4>
- <avrf:stackTrace>
<avrf:trace>vfbasics!+6e242c8e</avrf:trace>
<avrf:trace>vfbasics!+6e235ddc</avrf:trace>
<avrf:trace>vfbasics!+6e239a09</avrf:trace>
<avrf:trace>vfbasics!+6e240aac</avrf:trace>
<avrf:trace>ntdll!RtlApplicationVerifierStop+663</avrf:trace>
<avrf:trace>ntdll!RtlDeleteAce+296d</avrf:trace>
<avrf:trace>ntdll!LdrUnloadDll+46</avrf:trace>
<avrf:trace>vfbasics!+6e241443</avrf:trace>
<avrf:trace>kernel32!FreeLibrary+81</avrf:trace>
<avrf:trace>FBEMDED!KEYWORD_getTokens+f269</avrf:trace>
</avrf:stackTrace>
</avrf:logEntry>
</avrf:logSession>
</avrf:logfile>
Как видно из последнего лога, похоже при FreeLibrary fbembed.dll, остается
висеть активная критическая секция.
<avrf:message>Unloading DLL containing an active critical
section.</avrf:message>
Меняли fbembed.dll на обычный fbclient.dll и коннектились к обычному
Firebird серверу - Application Verifier не фиксировал
никаких ошибок. Т.е. дело именно в fbembed.dll. Пробовали даже Yaffil
Personal - такая же ошибка.
У меня есть подозрение что это из-за монопольного захвата базы данных
Emdedded-версией сервера. Может быть в может
выгрузки DLL сам сервер действительно забывает убирать за собой какие-то
критические секции? В Инете есть упоминания на подобные ошибки в DLL,
которые возникают в МНОГОПОТОЧНЫХ DLL, т.е. проблема может быть и сходная у
всех таких DLL, что-то связано с многопоточностью...
В общем гляньте пожалуйста в код, может возникнут какие-то мысли по этому
поводу...
_____________________________
С уважением, Андрей Могильный