Mám teraz doma nanovo preinštalovanú Vistu Ultimate x64 a keďže veľmi
veľa programujem, mám tu plno nástrojov na vývoj: Visual Studio, WinDbg,
MSDN Library s dokumentáciou, Apache na lokálny SVN server, samozrejme
Tortoise SVN (x86 aj x64 bit verzie, aby kontextové menu fungovalo správne
v Exploreri aj v Total Commanderi, ktorý je len 32bitový). Nesmie chýbať
virtuálna cd-romka – pomocou Virtual CD 9 – a NOD32 Antivirus 4.
Potreboval som nainštalovať Windows SDK, tak som pripojil .iso image a
chvíľu počkal. Autorun sa nespustil, takže som šiel do Štart >
Počítač, pravý klik na cd-romku, chvíľu sa nič nedialo a nasledoval Dr.
Watson, ktorý mi oznámil, že program Prieskumník sa musí reštartovať.
Na to že som ešte nestihoval nainštalovať rôzne bety a iné pofidérne
programy a mám tu len tie o ktorých viem, že sú veľmi stabilné, začal
Prieskumník vo Viste padať celkom rýchlo. Prvé podozrenie padlo na chybný
Tortoise SVN, ktorý je zaregistrovaný do exploreru a Virtual CD ktorý do neho
tiež pridáva vlastné kontextové menu. Stačí sa len dopátrať ku
skutočnej príčine.
Mark Russinovich má vynikajúce články na svojom blogu o možnostiach
hľadania chýb v padajúcich programoch a článok The
Case of the Random IE and WMP Crashes mi naozaj pomohol a konečne som mal
možnosť si skúsiť tento typ troubleshootingu.
Vo WinDbg sa stačí pripojiť na existujúci proces: File >
Attach to a Process… > explorer.exe a debugovanie môže začať.
WinDbg sleduje, čo sa deje v Prieskumníkovi a keď som klikol pravým na
cd-romku, hneď sa zastavil na výnimke:
V Call Stacku bolo vidieť, že Virtual CD DLLka uvoľňovala pämať a
zrejme tam mali chybičku.
Odskúšal som si aj utilitu adplus.vbs, ktorá je súčasťou Windows
Debugging Tools. Tento skript pripojí debugger na existujúci proces (alebo
spustí nový proces) a zaznamenáva 1st a 2nd chance výnimky, ktoré nastanú
v programe, zaloguje ju a vytvorí memory dump z ktorého sa dajú vyčítať
veľmi cenné informácie.
1st chance výnimka je taká, ktorá je v programe odchytená a viacej-menej si
s ňou dokáže poradiť.
2nd chance výnimky sú všetký neodchytené výnimky a teda spôsobujú
ukončenie procesu.
cscript adplus.vbs -crash -pn explorer.exe -o C:\dump
Adplus.vbs zaznamenal do logu 1st chance AccessViolation
exception v <Unloaded_vc9extse64.dll>+0×5f84
a okamžite aj 2nd chance AccessViolation exception čo
znamená, že tam je bug.
--- 2nd chance AccessViolation exception ----
---------------------------------------------------------------
Call Site
<Unloaded_vc9extse64.dll>+0x5f84
0x1`00000000
0x7f24f90
0x4ded7a8
0x360033`00380033
0x7fe`00000037
<Unloaded_vc9extse64.dll>+0xf1c8
Čo s takouto chybnou knižnicou? Virtual CD som používal v staršej
verzii, najnovšia 9.3.0 je opravená. Nie vždy však môže byť opravená
verzia dostupná. V takom prípade treba knižnicu zakázať napríklad pomocou
ShellExView. Veľmi
často podobné padanie spôsobujú staré DivX a xvid kodeky, keď vytvárajú
náhľady.