|
Página 1 de 1
|
¿Cómo Depurar Las Referencias Circulares?
Autor |
Mensaje |
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
¿Cómo Depurar Las Referencias Circulares?
Estoy haciendo una clase derivada de tableview y todo me funciona perfectamente salvo que en algún momento me aparece el warning:
Circular References detected
TableView(1)
¿Cómo puedo depurar en qué momento a = b que a su vez b=a? (que creo que es el origen del error)
=================== No podemos regresar
|
#1 Jueves, 29 Octobre 2009, 14:00 |
|
|
maikl
Usuario
Registrado: Octobre 2009
Mensajes: 48
Edad: 45 Ubicación: Bellvís (Lleida)
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Hola, no me ha quedado clara la pregunta, que es a y que es b?
Que quieres decir con "a = b que a su vez b=a", si a=b entonces b=a, no?
Quizas soy yo pero no me he enterado del asunto...
|
#2 Jueves, 29 Octobre 2009, 15:29 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Pido perdón, que llevas razón, soy más oscuro que las ingles de KuntaKinte...
Si tú tienes un objeto, en este caso un tableview, cualquier asignación que hagas se hace por referencia, es decir, lo que tienes es una referencia al objeto. Si le cambias alguna propieadad a la "copia", se la cambias al mismo objeto.
es decir si
dim tb as object
tb=me.tableView1
tb.tag = "Este soy yo"
print me.tableView1.tag
Producirá en la consola "Este soy yo"
Sin embargo, si luego se realiza una asignación inversa, algo así como "tableview1=tb" se da el caso de que intentas convertir tableview1 en una referencia a tb, que ya es a su vez una referencia a tableview1.
Eso se denomina referencia circular y genera un warning en la consola.
Sin embargo no sé cómo depurar el código para encontrar en qué punto se produce esa asignación errónea.
=================== No podemos regresar
|
#3 Jueves, 29 Octobre 2009, 17:19 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Hombre, en una hoja de cálculo ese tipo de problemas pueden ser realmente complejos y viene bien una herramienta para detectarlos, pero en gambas no veo el problema
Dim tb as object
tb=me.tableview
tb.tag="este soy yo"
Y ahora pongamos que en otro sitio tienes
tableview=tb
Y eso te da un error por referencia circular. Eso solo puede significar que tableview y tb son lo mismo así que para empezar estás haciendo una asignación inútil puesto que ambos ya son lo mismo. En este caso tendrías que mirar que es lo que contiene tb y para eso basta con buscar donde haces tb igual a algo.
Pero cuanto te encuentras ese tipo de problemas como regla general es que estás cometiendo un error de lógica. Conviene plantearse de nuevo lo que estas haciendo porque algo está muy mal. Lo mejor es ponerse al principio y comprobar paso a paso que estas haciendo y por que. Con toda seguridad encontrarás algún error de bulto.
Ese error yo no lo he tenido nunca pero errores de bulto .... si yo te contara ...
snif
|
#4 Jueves, 29 Octobre 2009, 18:39 |
|
|
maikl
Usuario
Registrado: Octobre 2009
Mensajes: 48
Edad: 45 Ubicación: Bellvís (Lleida)
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Muy a malas lo que hago es poblar la parte de código que creo que puede tener el problema de msgbox... perdon de Message.Error("x"), por ejemplo, o creo una variable intError y voy asignado valores a lo largo del código, capturo el error y imprimo el intError para saber por donde se ha quedado, voy acotando hasta que doy con la linea exacta que da el error.
Esto me va bien cuando el ejecutable falla pero cuando lo ejecuto desde el debuger no, o si está el programa instalado en el cliente y solo le falla a el.
Pero cuando se pueda lo mejor es lo que ha dicho soplo.
Saludos!
|
#5 Jueves, 29 Octobre 2009, 19:45 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Hombre no se en tu caso, pero para esas cosas parece mejor utilizar el DEBUG.
Incluyes en tu proyecto el componente debug y a partir de ahí donde te va interesando pones
debug variable
o bien
debug "estoy en la rutina de XX y el valor de tal cosa es" & variable
y tal
Cuando casca miras en la consola de gambas y ves los sitios por donde has pasado y los mensajes que has ido escribiendo. Así puedes ver donde coges valores erroneos o lo que sea.
También es práctico utilizar los puntos de interrupción que los pones y quitas con F9. Así ejecutas hasta cierto lugar y compruebas lo que tienes obtenido hasta ese momento.
|
#6 Jueves, 29 Octobre 2009, 20:26 |
|
|
maikl
Usuario
Registrado: Octobre 2009
Mensajes: 48
Edad: 45 Ubicación: Bellvís (Lleida)
|
Re: ¿Cómo Depurar Las Referencias Circulares?
Si si, lo que he dicho antes lo uso para casos "especiales":
* El exe (hablo del vb6) da un error pero desde el IDE todo va bién.
* El programa falla solo en casa del cliente.
Para todo lo demas, debugcard.
|
#7 Jueves, 29 Octobre 2009, 21:24 |
|
|
|
Temas parecidos
Temas parecidos
Tema |
Autor |
Foro |
Respuestas |
último mensaje |
|
Referencias Circulares
|
ahtonio |
General |
2 |
Miercoles, 30 Diciembre 2009, 13:12 ahtonio |
|
Tipos Por Valor Y Tipos Por Referencias
|
Shell |
General |
2 |
Viernes, 26 Octobre 2012, 05:18 fabianfv |
|
Referencias, Colecciones, Contenedores Y L...
|
shordi |
General |
0 |
Miercoles, 26 Febrero 2014, 18:28 shordi |
|
POO. Referencias. Reducir Código En Formu...
|
Shell |
General |
3 |
Lunes, 04 Diciembre 2017, 21:06 jsbsan |
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|