elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Error: No es posible crear una nueva página de seguridad para la pila
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error: No es posible crear una nueva página de seguridad para la pila  (Leído 21,894 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Error: No es posible crear una nueva página de seguridad para la pila
« en: 1 Agosto 2013, 15:19 pm »

¿Alguien me puede explicar a que se debe este error?:

Código:
No es posible crear una nueva página de seguridad para la pila

Esto sucede al dejar una aplicación corriendo (en Standby digamos) durante 2 horas más o menos.

Es muy dificil buscar información sobre el problema cuando el mensaje de error está en castellano, ya que si pongo el mensaje de error en Google la única información relacionada que aparece en los resultados es esto -> Wikipedia: Pila de llamadas <-

...Después de habermelo leido, me he quedado con esta parte:
Citar
...Usualmente hay exactamente una pila de llamadas asociado a un programa en ejecución (o más precisamente, con cada tarea o hilo de un proceso)...
...Si el empujar (push) consume todo el espacio asignado para la pila de llamadas, ocurre un error llamado desbordamiento de pila...

...No entiendo muy bien las explicaciones, pero yo no uso multi-threading en mi aplicación, y todas las funciones que devuelven un valor pues...eso, lo devuelven,
y me parece que todo lo que apilo luego lo desapilo, aunque no entiendo ni se que tipo de datos son los que se apilan en una aplicación y cuales son los que puede que no se estén desapilando bien y como detectarlos.

¿Que debo examinar en mi código para intentar averiguar que puede ser el causante de este error?.

EDITO: Creo que la traducción de mi problema al inglés sería -> Stack overflow <-

EDITO 2: Las recursiones que hago en las subrutinas que uso siempre devuelven un valor es decir que su ejecución termina corréctamente (o eso creo), así que entonces esto no puede estar causando el error, ¿verdad?

Si yo tengo esto, el desapilamiento (poping) de los datos es correcto, ¿no?:

Código
  1. sub loquesea(sender as object) handles algún evento cualquiera
  2.     sender.propiedad = uno(32)
  3. end sub
  4.  
  5. function uno(valor as int32)
  6.    return dos(valor)
  7. end sub
  8.  
  9. function dos(valor as int32)
  10.    ' hacer cosas...
  11.    return valor modificado
  12. end function

...Es que entonces no entiendo que tipo de recursiones son las que no estoy desapilando, si en todas las subrutinas que llamo a otras subrutinas devuelvo un valor para terminar su ejecución.

EDITO 3: Me asalta la duda de cual es el tamaño máximo del Stack (la pila), y si puedo agrandar ese tamaño (mientras busco una solución decente, claro).

EDITO 4: Y también tengo la duda de si existe alguna forma para detectar recursividades conflictivas en un código, porque si tengo que modificar código y luego mantener la aplicación durante 2 horas cada vez para ver si se ha arreglado o no... vaya tela!, y además el analizador de código del VS no me indica ninguna sugerencia que corregir.
 


« Última modificación: 1 Agosto 2013, 17:09 pm por EleKtro H@cker » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #1 en: 1 Agosto 2013, 19:55 pm »

¿Alguien me puede explicar a que se debe este error?:EDITO: Creo que la traducción de mi problema al inglés sería -> Stack overflow <-

EDITO 2: Las recursiones que hago en las subrutinas que uso siempre devuelven un valor es decir que su ejecución termina corréctamente (o eso creo), así que entonces esto no puede estar causando el error, ¿verdad?

Concuerdo en que si hay un error de overflow, probablemente sea por esas rutinas recursivas, en mi caso las miraría a fondo. Y el código no me dice nada, no veo recursión ahí.

EDITO 3: Me asalta la duda de cual es el tamaño máximo del Stack (la pila), y si puedo agrandar ese tamaño (mientras busco una solución decente, claro).

El stack por default de un thread es de 1MB, al momento de crearlo tienes una sobrecarga para pasar el límite de manera custom.

EDITO 4: Y también tengo la duda de si existe alguna forma para detectar recursividades conflictivas en un código, porque si tengo que modificar código y luego mantener la aplicación durante 2 horas cada vez para ver si se ha arreglado o no... vaya tela!, y además el analizador de código del VS no me indica ninguna sugerencia que corregir.

No conozco ningún complemento que detecte esto, ya que el problema se da en tiempo de ejecución.

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #2 en: 1 Agosto 2013, 20:19 pm »

Gracias Novlucker

Pues nada, lo miraré a fondo todo...

Pero ...¿Y si el causante del overflow fuese algún método de alguna class de alguna dll de terceros de la cual no dispongo del source, en ese caso no habria nada que hacer al respecto, verdad? :(

PD: No sabia que habia un overload para especificar el stack del thread, pero es que de todas formas yo no estoy generando ningún nuevo thread en mi app, ¿sabrias como modificar el stack del thread principal?

Un saludo
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #3 en: 1 Agosto 2013, 20:24 pm »

¿Qué hace tu aplicación y para que utilizas métodos recursivos?
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #4 en: 2 Agosto 2013, 20:57 pm »

¿Qué hace tu aplicación y para que utilizas métodos recursivos?

Tengo problemas con Windows 8 y no puedo examinar el code ahora, no es que no me apetezca contestarte xD, en cuanto pueda retomo este tema...

gracias

saludos
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #5 en: 6 Agosto 2013, 14:53 pm »

¿Qué hace tu aplicación y para que utilizas métodos recursivos?

He revisado el código por completo y no hay procedimiento que llame a otro, así que no se da la recursión. (y en caso de que se me haya escapado alguno estoy seguro que siempre se devuelve un valor y su ejecución termina corréctamente)

La aplicación es esta: http://foro.elhacker.net/buscador-t394060.0.html



Uso algunas dll's, sólo dos de ellas se utilizan constántemente en la aplicación, una es un usercontrol del Trackbar, y la otra es para controlar la aplicaicón Winamp,
en lugar de seguir usando esas dos dll's las he reemplazado por las classes del código fuente de las dll, y he desajuntado las dll.
he inspeccionado a los métodos que llamo de esas dos classes/dlls y tampoco hacen recursiones, bueno, en una de ellas si, pero parece que siempre devuelve el valor, aunque por otro lado el consumo de RAM no deja de subir al llamar a ese procedimiento... no sé si eso tendrá algo que ver, imagino que si el consumo de ram no deja de subir...hay algo que no está bien, aquí está el trozo de código al que me refiero:

http://foro.elhacker.net/net/fuga_de_memoria_en_una_funcion-t396259.0.html

« Última modificación: 6 Agosto 2013, 14:55 pm por EleKtro H@cker » En línea

WarZ0n3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #6 en: 6 Agosto 2013, 16:16 pm »

La verdad es que no se .NET, pero al ver tu problema me intereso mucho ayudarte, mas con el tema overflows(si tuviera más tiempo claro).
Pero voy a dar un ejemplo rapido, como bien dijo novluker.
Y el problema es que la verdad muchas veces es necesario la recursividad, pero no es lo recomendable para nada, ya que es una forma fácil de quedarse sin espacio en la pila, y como esta es limitada en tamaño puede llevar a un bof... cuando tenga mas tiempo hablamos.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #7 en: 7 Agosto 2013, 16:34 pm »

@WarZ0n3 espero impaciente tu ayuda (o la de quien sea xD)

A mi me interesa saber una cosa, para descartar opciones e intentar aislar la raiz del problema...

¿El motivo de un stackoverflow sólo puede ser la recursividad de los metodos? ¿Existen otros motivos que puedan causar un overflow de la pila?

y...bueno, vuelvo al principio, ¿Se puede aumentar el tamaño del stack del main thread?, ví que se podían usar algunos comandos de compilación para aumentar el tamaño del stack de la aplicación, pero iba escaso de tiempo y ya no tengo la información, creo que había que usar la aplicación BinEdit.exe u otra manera era especificar un parámetro "/Stack" en el compilador del framework, ¿Me podeis verificar esto?.

Saludos
« Última modificación: 7 Agosto 2013, 16:39 pm por EleKtro H@cker » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #8 en: 7 Agosto 2013, 17:03 pm »

http://www.atalasoft.com/cs/blogs/rickm/archive/2008/04/22/increasing-the-size-of-your-stack-net-memory-management-part-3.aspx

http://blog.dmbcllc.com/stackoverflowexception-what-causes-this/

Y voy al otro post!
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Error: No es posible crear una nueva página de seguridad para la pila
« Respuesta #9 en: 7 Agosto 2013, 17:34 pm »

Gracias Novlucker.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nueva Página Para Clanes... Demuestra Tus Victorias...
Juegos y Consolas
_the_master_36 2 2,243 Último mensaje 22 Noviembre 2005, 05:50 am
por _the_master_36
Nueva pagina para subir imagenes
Noticias
Hades_Hell 0 1,550 Último mensaje 4 Octubre 2010, 21:10 pm
por Hades_Hell
Nueva herramienta para navegar con seguridad
Noticias
wolfbcn 0 2,061 Último mensaje 4 Diciembre 2010, 02:48 am
por wolfbcn
nueva página para los interesados.
Mensajería
buite 0 2,050 Último mensaje 23 Octubre 2017, 00:51 am
por buite
mensaje de pagina web. desbordamiento de pila en la linea...
Programación Visual Basic
dgtn 0 1,916 Último mensaje 9 Abril 2019, 02:27 am
por dgtn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines