2010-11-30 8 views
19

Antecedentes: Estoy trabajando en una aplicación de escritorio .NET 4.0 basada WinForm que tiene unos hilos y temporizadores y utiliza algún tipo de procesamiento de GDI para controles de usuario. Durante mi desarrollo por lo general mire a través del explorador de procesos Sysinternal para asegurarse de que no hay nada inusual con mi solicitud como el recuento de GDI trata como objetos de usuario, etc.clr.dll LogHelp_TerminateOnAssert en un proceso de .NET 4.0

Problema: Durante el uso de Process Explorer, encontré esa hebras pestaña para la propiedad de mi aplicación en Process Explorer muestra un montón y muchas entradas de "clr.dll! LogHelp_TerminateOnAssert + 0x58f68". ¿Esto es normal? Creo que no es porque ninguna otra aplicación .net (que había escrito en el pasado) muestra la misma entrada en sus propiedades en Process Explorer.

¿Qué es LogHelp_TerminateOnAssert()? (Creo que es una función en clr.dll)

¿Por qué se llama LogHelp_TerminateOnAssert() tantas veces?

Cualquier apuntador será de gran ayuda.

Gracias de antemano.

+0

Actualmente estoy teniendo un problema similar con muchas excepciones lanzadas internamente en .Net desde este método. Actualmente tengo pocas pistas de por qué esto sería. – Guy

+0

¿Has descubierto por qué se lanzan estas excepciones? – silverspoon

+0

¿Estás usando muchos hilos? –

Respuesta

1

Menciona el uso de subprocesos: dado que cada subproceso tiene su propia pila, es posible que el tamaño predeterminado de la pila se exceda en algún momento y se produzca la excepción que atrapa el .NET Runtime. ¿Qué tipo de trabajo estás haciendo en los hilos (recursión, muchas variables de pila, etc.)?

Creo que el tamaño predeterminado de la pila de subprocesos se establece en 1 MB; intente configurar el tamaño de la pila en 4MB en el constructor de subprocesos y verifique si el error persiste.

+0

Gracias, voy a echar un vistazo. – silverspoon

7

clr.dll! LogHelp_TerminateOnAssert + 0x58f68

El gran número (+ 58f68) indica que el método real en clr.dll está muy lejos de LogHelp_TerminateOnAssert(). Probablemente deberías corregir los símbolos e intentarlo de nuevo para obtener la pila de llamadas correcta. A continuación, puede descubrir cuál es el método real.

No es LogHelp_TerminateOnAssert(), por lo que es inútil averiguar qué hace LogHelp_TerminateOnAssert().

para fijar los símbolos: en el explorador de procesos, vaya a Options/Configure Symbols, a continuación, introduzca

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 

donde c:\symbols es la ruta en la que desea almacenar los archivos descargados.

+0

¿Qué quiere decir con "corregir los símbolos"? Gracias. – silverspoon

+2

Vaya a Opciones/Configurar símbolos ... En la ruta de símbolos, ingrese SRV * c: \ symbols * http: //msdl.microsoft.com/download/symbols –

+0

@ThomasW. Gracias por las respuestas. Solo quería decir que tuve que agregar 'http' en la ruta antes de que funcionase para mí en caso de que alguien más tenga este problema. SRV * c: \ symbols * http: //msdl.microsoft.com/download/symbols –