Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Debug

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Debug Responder citando

Alguien conoce algun programa o libreria que incluir en los proyectos, de forma que cuando llegue una excepcion te diga la linea de código en la que ha fallado. O sea, que si metes la pata con un puntero, o se te olvida inicializar una variable o cualquier fallo típico, saber donde ha fallado. Esto con el ejecutable del proyecto sólo, sin el compilador corriendo en la misma máquina...


Gracias.

Volver arriba
Mensaje    Asunto: Debug Responder citando

Hola,
Creo que es imposible que haya algo como lo que describes, ya que una vez compilado, no queda ningún rastro de las líneas del archivo fuente.
Lo que sí se puede hacer, es usar exhaustivamente los bloques try-catch, con GetLastError para que te informe del error que lanzó la excepción. Y desde acá, mostrar un mensaje o guardarlo en un archivito de texto, identificando el error, la línea dónde se produjo, y todo lo que necesites.

Hasta chau
Alejandro

Volver arriba
Mensaje    Asunto: Debug Responder citando

Yo hago algo similar a lo que propone Alejandro... con la excepción de que no sé utilizar muy bien GetLastError...

Según lo que entiendo GetLastError retorna el tipo de error asociado por supuesto a la función. Y no está relacionado (el mensaje) con la línea de código.

como lo hago yo?

int TheZero = 0;

try
{
int BadDivision =1/TheZero;
}
catch(...)
{
showMessage("int BadDivision =1/TheZero;");
}

...

perdonen la ignorancia...

Volver arriba
Mensaje    Asunto: Debug Responder citando

Hola de nuevo,
buceando en las posibilidades de identificar el error que lanza una excepción, encuentro cuatro formas distintas, de acuerdo a la situación que se imponga, naturalmente, que la opción recomendada por joseluisbz es el más práctico en la mayoría de los casos.
Usando el mismo ejemplo:


void __fastcall TForm1::Button1Click(TObject *Sender)
{
int TheZero = 0;

try
{
int BadDivision =1/TheZero;
}

catch(Exception &e)
{

// 1) Mensaje estandar de la excepción interseptada:
Application->ShowException(& e);

// 2) Mensaje que elegimos para EDivByZero:
throw EDivByZero("Este es el mensaje elegidol "
"para a EDivByZero");


// Formateamos el mensaje:
LPVOID BufferDelMensaje;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &BufferDelMensaje,
0,
NULL
);

// 3) mensaje de GetLastError en el idioma por defecto:
MessageBox( NULL,
(LPTSTR)BufferDelMensaje,
"GetLastError formateado",
MB_OK|MB_ICONINFORMATION
);

// libera la memoria asignada a BufferDelMensaje:
LocalFree( BufferDelMensaje );

// 4) Acción elejida por nosotros, por ejemplo:
ShowMessage("int BadDivision =1/TheZero;");
}
}

Volver arriba
Mensaje    Asunto: Debug Responder citando

Hai dos identificadores globales que te pueden ser útiles para determinar el archivo y la línea de código en la que se ha producido un error. Son __FILE__ y __LINE__ .
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.