Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Il LoaderLock di Visual Studio 2005

Tra le tante feature di Visual Studio 2005 dedicate al debug, ce n'è una che prende il nome di LoaderLock managed debugging assistant (MDA):

The LoaderLock managed debugging assistant (MDA) detects attempts to execute managed code on a thread that holds the Microsoft Windows operating system loader lock. Any such execution is illegal because it can lead to deadlocks and to use of DLLs before they have been initialized by the operating system's loader.

Se il LoaderLock individua una situazione come quella descritta, interrompe il programma lanciando un'eccezione con questo messaggio:

Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.

In alcuni casi, tuttavia, esso si rivela troppo "smart" e segnala il problema anche quando, in realtà, non dovrebbe. Ho letto di questo inconveniente su diversi forum e io stesso ne sono stato vittima, tentando di creare con Visual C++ una DLL, che a sua volta richiamava una libreria di terze parti, e utilizzando poi il Platform Invoke per accedere alle sue funzionalità da un programma C#.

In una situazione del genere, si può provare a disabilitare il controllo effettuato dal LoaderLock: selezionare il comando Exceptions dal menu Debug, quindi espandere il ramo Managed Debug Assistants e disabilitare il segno di spunta nella colonna Throw in corrispondenza della voce LoaderLock. Così facendo, se effettivamente il LoaderLock aveva segnalato un problema reale, tentando di richiamare la funzione si otterrà il blocco dell'applicazione; in caso contrario (come è capitato a me), il vostro progetto tornerà a funzionare correttamente.

Print | posted on Tuesday, July 24, 2007 11:16 AM | Filed Under [ C# VB .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET