Article View: es.comp.os.linux.programacion
Article #16756Re: Problemillas con los sockets
From: *puntero_loko
Date: Mon, 27 Mar 2000 00:00
Date: Mon, 27 Mar 2000 00:00
168 lines
8614 bytes
8614 bytes
Santiago Romero dijo sobre Re: Problemillas con los sockets, en fecha: Fri, 24 Mar 2000 22:38:33 +0100 |El Mon, 20 Mar 2000 23:01:09 +0100, *puntero_loko escribi�: |>Paco Orts dijo sobre Re: Problemillas con los sockets, |>en fecha: Mon, 20 Mar 2000 13:36:31 +0100 | |>El electric-fence es muy sencillo, simplementes al enlaces a�ades el |>par�metro -lefence y ejecutas. Normalmente si te da un segmentation |>fault es justo donde est� el error y no 300 l�neas m�s abajo. | | �Que tal puntero_loco un cursilo de gdb, xxgdb y electricfence para | la FAQ y postearlo aqui cuando se pregunte sobre el tema? ALgo corto | de referencia. Va, espero tu post XDDDDDDD Pues al gdb ultimamente le estoy cogiendo mucha ma�a con esto de los bugs del jfpop, el xxgdb no lo he visto mucho, tengo m�s contacto con el DDD, el electricfence no tiene mucho misterio (y la p�gina man es explicativa 100%), y adem�s el s�bado que viene tengo un examen, pero prometo que esta semana escribo un post aqu�, de todos modos para los impacientes explico como va el electric-fence en dos palabras: [Bah, iba a hacer un resumen en dos l�neas pero...] El electric fence no es m�s que una librer�a que sustituye a malloc, free y compa��a, por otras funciones que marcan las zonas de memoria por encima (y por debajo, si as� lo hemos configurado), como no accesibles, de modo que si por ejemplo al leer de una cadena (o peor, al escribir), o un array nos pasamos, por poquito que sea, el programa dar� un Segmentation Fault. Pues vaya m.... pensar� alguno. Pues no se�or. Cuando enlazamos con el electric-fence el fallo nos lo dar� justo donde nos hayamos ido, no 500 instrucciones m�s tarde (por algo lo usan en Pixar). De este modo, s�lo tenemos que lanzar el gdb, ir ejecutando, y cuando nos de el segmentation fault, pues ya sabemos que ah� esta el fallo. Como utilizarlo: M�s f�cil imposible, simplemente enlazar con la librer�a est�tica con -lefence en los par�metros del gcc. Esto har� que el programa sea muuuuuuuuuuuuuuucho m�s lento y ocupe muuuuuuuuuuuuuuuuuucha m�s memoria, pero para depurar eso no importa. Esto nos da una configuraci�n por defecto de que detecte los accesos m�s all� del l�mite, pero no antes. Todo lo dem�s se configura con variables de entorno, la m�s util es la opci�n EF_PROTECT_BELOW que nos detectar� tambi�n los accesos por debajo de la memoria asignada. En realidad no tiene muchas m�s opciones, pero la p�gina man no tiene desperdicio: Hay que leerla (no es muy larga). Ahora un poquito (muy poquito) del gdb: Gdb es un gran depurador con multitud de opciones interesantes. Pero la mayor parte del tiempo vamos a usar muy pocas de ellas. Para poder depurar un programa es necesario haberlo compilado con la opci�n -g del gcc y por supuesto no stripearlo. Despu�s simplemente: gdb programa Nos saldr� un fea pantalla como: GNU gdb 19990928 Copyright 1998 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu"... (gdb) El (gdb) es el prompt. Podemos obtener ayuda con 'help' y 'help secci�n' (las secciones posibles salen poniendo help sin nada). Al grano: Para establecer los argumentos que le pasar�amos al programa: set args argumento1 argumento2 etc Para establecer breakpoints: break funcion Por ejemplo, la primera vez har�amos: break main Para depurar el programa desde el principio. Una vez hemos puesto los breakpoints y los argumentos empezamos a ejecutar con: run Esto nos sacar� la primera l�nea de nuestro programa. Para obtener un listado de las l�neas cercanas: list que puede abreviarse como 'l'. En general casi todos los comandos tienen una abreviatura como primera letra salvo cuando puede producirse ambiguedad. Para pasar a la siguiente l�nea: next (abreviado como n) El next puede aceptar un argumento que es el n�mero de l�neas que queremos ejecutar. Si pulsamos intro se repite el �ltimo comando introducido (�til para ejecutar r�pidamente varios next). next si encuentra una llamada a funci�n no se introduce en ella. Esto es �til para detectar r�pidamente donde nos peta el programa recorriendo las llamadas a funci�n del programa y ver en cual de ellas falla. Despu�s podemos volver a ejecutar pero al llegar a la funci�n que falla (si no nos hemos dado cuenta ya de cual es el fallo) con: step (abreviado como s) exactamente igual que next, pero introduci�ndose en las funciones. Si est� funci�n llama a su vez a varias otras funciones es recomendable repetir el proceso anterior (next, localizar, meternos con step, next, localizar...) hasta que demos con la l�nea que falla. Por supuesto tambi�n podemos (y debemos) imprimir los valores de las variables y estructuras que consideremos 'sospechosos'. Esto se hace con: print variable (abreviado como p). En el caso de cadenas tenemos printf: printf "cadena con un formato %d muy bonito" que admite los mismos especificadores de formato que el printf de C (sin los par�ntesis). Si estamos utilizando el DDD (gr�fico) podemos poner una ventanita donde nos sale continuamente el valor que tienen ciertos datos. Adem�s con print tambi�n podemos cambiar el valor de los datos: print dato=loquequeramos (comillas si es una cadena). Con esto ya hay para ir tirando (para m�s ayuda, el info). Una �ltima cosa: Los archivos core, esas molestos archivos de 6 megas que nos deja siempre el netscape como recuerdo de su inoperancia. Pues son extremadamente �tiles para depurar los programas. Podemos pensar en el core como en el cadaver del programa que podemos examinar, si el programa fue compilado con -g y no stripeado. Para utilizarlos se hace con: gdb programa -c core (importante que 'programa' y el proceso que gener� el core sean la misma versi�n). Esto (con suerte) nos dir� en que l�nea fallo el programa (si las fuentes est�n en el mismo directorio), y con m�s suerte a�n nos permitir� ver los valores de variables y dem�s. Que el core sea realmente informativo depende de muchos factores como la fase lunar, si nos hemos afeitado (tiendo a pensar que cuando estoy reci�n afeitado y limpio los cores son m�s amigables) y dem�s. Un �ltimo consejo. El gcc es un compilador algo peculiar porque nos deja compilar con s�mbolos de depuraci�n y optimizar. Mi consejo es que para depurar paseis de las optimizaciones sino quereis ver cosas raras cuando estemos ejecutando paso a paso (l�neas que se saltan, while que empiezan a ejecutarse por debajo, etc.) Fin del mensaje: man efence, info gdb son vuestros amigos. El pr�ximo post: DDD y como evitar perder la cordura ante los Heisenbugs (1). (1): D�cese del bug que provoca un fallo en nuestro programa en cualquier circunstancia menos cuando lo ejecutamos con el depurador, en cuyo caso el programa funciona a la perfecci�n. Puedo asegurar que no son una historia de miedo que corra de maestros a alumnos, como el coco y dem�s: Existen. Rezo por vosotros por que no encontreis ninguno. -- P�gina personal: http://personal1.iddeo.es/ferkys ---------------- Para obtener mi clave PGP env�ame un correo con el subject "send key pub" ----------------
Technical Details
Message-ID:
<slrn8dtn5t.dl.jajs@Pascual.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com> <87wvn01qge.fsf@eb2ebu.ampr.org> <8b52ma$5gi$1@nnrp1.deja.com> <38D61B4F.7A6C5DC@mtgsystem.com> <slrn8dd7t5.dn.jajs@Pascual.es> <slrn8dno2p.of.compiler@compiler.linux.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,58a23ab56d6ca5b2 X-Google-Attributes: gidf86c8,public From: jajs@NOSPAMretemail.es (*puntero_loko) Subject: Re: Problemillas con los sockets Date: 2000/03/27 Message-ID: <slrn8dtn5t.dl.jajs@Pascual.es> X-Deja-AN: 603005341 Content-Transfer-Encoding: 8bit References: <38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com> <87wvn01qge.fsf@eb2ebu.ampr.org> <8b52ma$5gi$1@nnrp1.deja.com> <38D61B4F.7A6C5DC@mtgsystem.com> <slrn8dd7t5.dn.jajs@Pascual.es> <slrn8dno2p.of.compiler@compiler.linux.es> Content-Type: text/plain; charset=iso-8859-1 Organization: Iddeo - Retevisi�n Mime-Version: 1.0 User-Agent: slrn/0.9.6.2 (Linux) Reply-To: jajs@NOSPAMretemail.es Newsgroups: es.comp.os.linux.programacion