[C con Clase] Presentacion y consulta

Gilberto Cuba Ricardo gilberto.cuba en ucp.ho.rimed.cu
Sab Ene 29 17:52:00 CET 2011


Hola,

Stack Overflow escribió:
> Hola lista,

> Estuve bastante tiempo buscando lista de correo en castellano sobre programacion avanzada en C/C++
> Espero aprender y ayudar en todo lo que pueda.
> Soy programador C, no tanto C++. Trabajo mas que nada en ambientes Unix/Linux

Bienvenido a la lista.

> Tengo una consulta sobre programacion con threads.

No soy experto en el tema, pero sí algo atrevido. ;-)

> El punto es que estoy portando un servidor que funciona en Windows,
> a Linux. Como todo servidor, usa sockets y threads
> Cuando lo ejecuto, no funciona como espero. Entonces quiero usar el debugger para seguirlo.
> En Linux usamos gdb.

En Windows también se usa, con el MinGW32.

> La cosa es que cuando ejecuto el programa dentro de gdb, obtengo un
> SIGSEV en un thread, pero el proceso continua corriendo (otro thread continua ejecutando).

> Lo extraño es que si ejecuto el programa fuera del gdb, no se ve
> ningun mensaje que indique que hubo una excepcion SIGSEV.
>
> Si alguien tiene experiencia en este tipo de desarrollos, le
> agradeceria que me aclare este comportamiento.

Realmente no tengo mucha idea de por qué pudiera ser, pero me ha
pasado eso mismo en algunas ocasiones. Mi idea al respecto es que en
el código hay algo que dentro de su funcionamiento no explota
(SIGSEGV), porque no se accede digamos a una ubicación de memoria
inválida, pero cuando utilizamos el gdb, este sí trata de barrer todos
los estados y valores de la variables, y ahí es donde se presenta el
error que conocemos. Claro, a no ser que estuviéramos en presencia de
un bug en el gdb.

> Debo confiar en lo que indica el gdb o lo que indica el programa que ejecuto sin el debugger ?

Yo confiaría en el gdb, aunque no ciegamente. Como también, si veo que
se me hace muy difícil debuguearlo con el gdb, porque obtengo el
SIGSEGV muy rápido antes de atrapar el error en alguna línea/posición
del programa anterior, pues me dedico entonces a realizar una cacería
exhaustiva con printf()/std::cout seguido de un flush, para ir
teniendo idea de por dónde va la cosa.

> Realmente puede haber un SIGSEV en un thread y el programa continua ejecutando ?

No sabría que decirte, si el gdb no controlara cómo cerrarlo en este
tipo de casos (que me parece que sí), me imagino entonces que continue
su ejecución.

> Bueno, saludos y muchas gracias
> SO32

-- 
Saludos,
 Gilberto Cuba Ricardo





Más información sobre la lista de distribución Cconclase