Enfrentándose al StackOverflowException - WarNov Developer Evangelist - Site Home - MSDN Blogs
Sign in
MSDN Blogs
Microsoft Blog Images
More ...
Enfrentándose al StackOverflowException
Buscar en el Blog de WarNov
Azure Specialist
Pregunte a WarNov
http://www.formspring.me/warnov
Twitter
Translator
Translate this Site
Traducir esta página
Con tecnología de
Microsoft® Translator
Recent Posts
XBOX ONE
Posted
12 hours ago
by
WarNov
0
Comments
NodeJS: Shared State Concurrency y WebMatrix
Posted
7 days ago
by
WarNov
0
Comments
Windows Azure Websites: Dominios Personalizados
Posted
13 days ago
by
WarNov
0
Comments
Windows 8: Su primer semestre
Posted
15 days ago
by
WarNov
0
Comments
Windows 8: Una poderosa herramienta de Marketing
Posted
20 days ago
by
WarNov
0
Comments
Tags
.NET Framework
apps
ASP.NET
Azure
Bing
C#
Eventos
Free
HTML5
Internet Explorer
Interoperabilidad Microsoft
JavaScript
Silverlight
SqlAzure
SqlServer
Store
Visual Studio
Web
Windows 8
Windows Azure
Windows Phone 7
Windows Phone 8
WinRT
WP7
WP8
Social Media Sharing
Ping FM
Archives
Archives
May 2013
(5)
April 2013
(1)
March 2013
(4)
February 2013
(5)
January 2013
(2)
December 2012
(9)
November 2012
(9)
October 2012
(3)
September 2012
(9)
August 2012
(6)
July 2012
(8)
June 2012
(12)
April 2012
(4)
March 2012
(2)
February 2012
(7)
January 2012
(3)
December 2011
(2)
November 2011
(2)
October 2011
(3)
September 2011
(4)
August 2011
(7)
July 2011
(9)
June 2011
(9)
May 2011
(13)
April 2011
(9)
March 2011
(16)
February 2011
(6)
January 2011
(9)
December 2010
(10)
November 2010
(14)
October 2010
(13)
September 2010
(6)
August 2010
(4)
July 2010
(3)
June 2010
(10)
May 2010
(14)
April 2010
(13)
March 2010
(6)
February 2010
(6)
January 2010
(6)
December 2009
(3)
November 2009
(4)
October 2009
(2)
August 2009
(10)
Common Tasks
Blog Home
Email Blog Author
About
RSS for comments
RSS for posts
WarNov Av
|
Create Your Badge
Stats
MSDN Blogs
>
WarNov Developer Evangelist
>
Enfrentándose al StackOverflowException
Enfrentándose al StackOverflowException
WarNov
16 Aug 2009 4:41 PM
Comments
0
Más de una semana sin solución. Buscaron en internet a ver... nada.
Los StackOverFlow Exception no se pueden capturar con un try catch. Ni lo intenten. Cuando sucede la aplicación está más muerta que al cerrarla.
Finalmente, me preguntaron....
"Eso es que tienen una función recursiva con el punto de parada mal diseñado" les dije.
Pero no había tal.
Entonces me puse a mirar...
En la primera ocasión no vi nada anormal en realidad. Solo un par de cosas para optimizar el código. Pero nada como para decir que el misterioso snack dejara de aparecer.
Una y otra vez se repetía. Y lo peor, es que era un proceso bastante largo, que siempre fallaba luego de la primera horta. Así que hacer debug era un infierno total.
En la segunda ocasión que me senté a mirarle el código, tampoco vi nada raro; se me ocurrió que depronto había mucha memoria desperdiciada... pero nótenlo: eso nunca tiene que ver con el stack. Snack es una cosa y Stack es otra y Memoria no tiene que ver con ellos. El Stack almacena el listado de funciones que se han ejecutado. Y tiene un tamaño entre 500 y 1000. Así que si llamamos más de ese número, el stack secillamente se llena y la aplicación colapsa.
Teniendo esto muy presente, decidí volver a chequear el código una tercera vez...
y oh sorpresa cuando al fin encontré lo que estaba pasando!!!!
Había un método que al final del mismo, tenía un disparador de evento. Otra clase capturaba ese evento y en respuesta lanzaba la ejecución de otro proceso distinto que antes de terminar volvía a lanzar ese evento y así sucesivamente. Todo esto siempre se ejecutaba con el mismo thread. Así que cada vez, el método se quedaba esperando a que se ejecutara el siguiente. Por esto el stack comenzaba a llenarse hasta colapsar, porque las funciones no terminaban, pero si se llamaba a otras.
Es algo para nada obvio. Pero al fin por pura intuición se descubrió. Lo ridículo del asunto, era el mensaje que representaba el evento disparado: "Terminé" Entonces otra clase leía que había terminado y ponía a correr otro proceso. Que sentido tiene eso? Era muy difícil programar a la clase externa que corriera un proceso y luego otro y otro y ya? No lo creo. Sencillamente a algunos diseños les falta ingeniería de verdad.
0 Comments
.NET Framework
,
C#
Leave a Comment
Name
Comment
Please add 3 and 5 and type the answer here:
Post