Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Visual C++ 7 y sus triquiñuelas...

Iniciado por MChiz, 23 de Febrero de 2003, 11:41:37 PM

« anterior - próximo »

MChiz

                                Hola a todos:
Hace unos meses que estoy utilizando el Visual C++ 7 ( el .NET ) y me ha gustado bastante... hasta hoy.
Tengo mi programita y tal, que funciona bien EN MODO DEBUG, pero a la que lo paso a Release, no funciona... esto me habia pasado con anteriores versiones, pero realmente era culpa mia ( memory leaks y tal ). He estado toqueteando las opciones de compilacion y he visto donde falla. En la opcion Optimize, si la desactivo, me funciona bien.
Y ahora paso a explicar mi problema :P
El caso es que tengo mi programa que hace cierta cosa ( no creo que sea importante el explicarlo ) y lo hace bien, pero cuando lo paso a Release simplemente se comporta de manera distinta. Es como... si se saltase instrucciones o algo asi... estoy realmente desesperado. Alguien sabe si ya ha salido un Service Pack para esta version del Visual ( la he buscado, pero no la encuentro ).
Muchisimas gracias a todos
Un saludo                                

CordayUK

                                mmm, porque crees que falla el VS7 y que necesita un service pack??
No quiero decir que tu programa este mal, sino que mas bien parece el modo release cambia algo que hace que tu programa no funcione bien. No se que puede ser pero me resulta muy extrano. Dices que te parece hay instrucciones que no se ejecutan o algo parecido... cuales son? como es el codigo? de que va el programa? (trabaja mucho con la memoria/ ficheros/ red / que hace)                                

MChiz

                                Hola!
Pienso que falla el VS7 porque estoy un poco agonizado :b, y creo que necesita un Service Pack porque con el VS6 hicieron unos cuantos ;b
Yo soy el primero en pensar que mi programa esta mal, pero le he dado mil vueltas, y el VS7 hace cosas raras.
Las instrucciones que parece que no ejecute son comparaciones de "mayor", "ands" y menor, con coma flotante.
Mi programa es un sistema de camaras. No hay nada raro ni duro sobre trabajo con memoria, archivos, redes ni cosas por el estilo. Es solo una camara, un escenario y un control de teclado. Por eso me extraña.
En fin, si a alguien le ha ocurrido algo asi, que me lo diga, porfavor.
Gracias de nuevo                                

Zaelsius

Yo estoy seguro al 99% de que el fallo debe ser tuyo. Y si dices que en modo debug no va y sí lo hace en release....está claro que se te va la memoria por algun lado...

Yo he estado usando el VC++ 5.0 hasta hace dos meses sin service packs y no encontré ninguna situación en la que pudiese echarle la culpa al compilador. Postea aquí el código y le echamos un vistazo :-D

Yo el otro día me tiré 40 minutos para corregir un bug, y resulta que había construido mal un if-the-else a la hora de poner las llaves...
:-D

Seguro que es un fallo tonto.

Suerte!

Grugnorr

                                Recuerda que en debug te pone las variables a 0 y demás cosillas.

Suena como si el compilador comprobara en tiempo de compilación que el flujo del programa no pasa por las instrucciones que dices que te omite, comprueba los if y demás cosas.

Suerte :!:                                
hat the hells!

MChiz

                                Muchisimas gracias a todos : )
Esta misma noche volvere a ello... pero sigue pareciendome extraño... yo tengo la mania de inicializar siempre las variables... ah! Y dije que en DEBUG me va y en RELEASE no ;b
Un saludoteee!!                                

CoLSoN2

                                estoy en la misma situación que MChiz, aunque yo con VC6. Supongo que será fallo mio pero no lo encuentro :
En Debug tira, en Release no (fallo de compilación). Aunque concuerda con lo que dice MChiz de que parece que se salte instrucciones. Hago varios "Log()'s" durante la ejecución, hasta que peta y s0lo se guardan algunos (¿?) cuando en el debug se guardan todos. Estos logs no estan en bucles ni ifs ni nada , cosa rara donde las haya.
Si deshabilito el "optimize", tal como dice MChiz, sí que va :                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

fiero

                                Una vez tuve un problema de este tipo, pero fué por mi culpa, por hacer cosas raras con las variables. Os cuento mi caso:

Para mi comodidad, creaba 4 variables consecutivas de tipo short:

short var4,var3,var2,var1;
después modificaba estas variables a placer, y luego las cargaba en un registro mmx de golpe:

_asm{

     lea edi,var1

     movq mm0, qword ptr[edi]

}

En modo debug, funcionaba bien, ya que las 4 variables se creaban de forma consecutiva en memoria, ocupando cada una 2 bytes (lo normal, siendo un short).

La cuestión es que en modo release el programa no funcionaba. Tras muchos quebraderos de cabeza, conseguí averiguar que al activar la optión "optimize for speed" en el modo release, las variables ocupaban 32 bits cada una, imagino que el compilador hace esto para trabajar siempre con registros de 32 bits, lo que resulta más rápido que ir cambiando entre instrucciones de 16 y 32 bits. Por lo tanto, las variables ya no se creaban de forma consecutiva en memoria, y al cargarlas en el registro mmx sólo conseguia cargar 2 de ellas y unos 0000 intercalados...

Sé que este es un problema muy poco corriente, debido a mi chapucera forma de programar aquello, pero igual te puede dar alguna pista...

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

CoLSoN2

                                pues no es mi caso, porque yo de manejos de memoria a bajo nivel y cosas de estas no hago xDD                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

ethernet

yo pienso lo mismo de grungnor, en debug inicia las variables a 0 ...

CoLSoN2

                                por cierto ethernet, de donde puedo pillar la python22_d.lib ? es que no la encuentro y necesito compilar en debug!                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Grugnorr

                                www.python.org ?                                
hat the hells!

CoLSoN2

                                no está ahí, se lo tiene que compilar uno, pero ya me lo ha pasado Gar|on :P:P                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

x-alien

                                pues no se donde esta el error, ami nunca me ha dado error.. y siempre compilo en release.

si te da tu codigo memory leaks... debuggealo paso a pasito y sabras onde puede estar el error.

yo siempre compilo con nivel wc4, el maximo.^^
tengo un amigo al k le pasaba una cosa como la tuya pero eso era un despiste suyo... compilaba n debug... y cuando compilaba en release no le iba.. le daba errores de linkeo... pork no habia linkeao las librerias dx en el modo release.. una chorra...

ciertamente, si pegaras los mensajes de error (y warnings si esk tienes ^^), se te podria ayudar.

podriais pegar los mensajes de error... si se dice k tengo un error... averigua onde es...una aguja en un pajar

seguro k es un error ultra tonto.. un despiste.
no creo k por programar una camara k se mueve por un escenario de tantos problemas en modo release.. :-?


pd. uso winxp con el vc++7. y no tengo service packs nuevos.
pd. si tu codigo funciona en debug tiene k ir por webos en release, vamos creo yo, por lo menos ami nunca me ha dao un error.                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

CoLSoN2

                               
Citarpodriais pegar los mensajes de error... si se dice k tengo un error... averigua onde es...una aguja en un pajar
son errores en ejecución probablemente como los que me salen a mi: "la memoria en XXXXX no puede ser "read/write" o alguna parida por el estilo.                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.