elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Como programar un depurador avanzado?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como programar un depurador avanzado?  (Leído 3,964 veces)
Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
¿Como programar un depurador avanzado?
« en: 22 Mayo 2017, 18:18 pm »

Buenas, hace un tiempo termine de desarrollar un lenguaje de programación orientado a objetos en español, debido a esto me encontré en la necesidad de escribir un depurador para que los programadores puedan detectar errores en su código de manera mas fácil.

El dilema es que no se como escribirlo de tal manera que se visualice la línea de código que se esta ejecutando en el momento ¿alguien tiene alguna referencia de como hacer este trabajo?


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: ¿Como programar un depurador avanzado?
« Respuesta #1 en: 22 Mayo 2017, 18:49 pm »

Si declaraste tu lenguaje en un formato BNF, (o EBNF), no debería serte complicado chequear la semántica ni la sintaxis.

de hecho, eso te servirá luego para poderlo compilar, pués esa fase será necesaria (suponiendo que el lenguaje sea compilable e/(o no sólo) interpretado).


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ¿Como programar un depurador avanzado?
« Respuesta #2 en: 22 Mayo 2017, 18:50 pm »

agrego...

recuerda que para debug tienes un tipo de compilación especial, allí puedes agregar información extra que permita a tu programa relacionar entre el compilado y el texto
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Re: ¿Como programar un depurador avanzado?
« Respuesta #3 en: 22 Mayo 2017, 19:26 pm »

Si declaraste tu lenguaje en un formato BNF, (o EBNF), no debería serte complicado chequear la semántica ni la sintaxis.

de hecho, eso te servirá luego para poderlo compilar, pués esa fase será necesaria (suponiendo que el lenguaje sea compilable e/(o no sólo) interpretado).

Es la primera vez que escucho sobre esa notación y no creo que sea el caso  :-\

agrego...

recuerda que para debug tienes un tipo de compilación especial, allí puedes agregar información extra que permita a tu programa relacionar entre el compilado y el texto

Debido a que es un lenguaje compilado, tengo entendido que debo insertar interrupciones (int3), pero mas haya de eso no se que hacer.
En línea

Poyoncio

Desconectado Desconectado

Mensajes: 220



Ver Perfil WWW
Re: ¿Como programar un depurador avanzado?
« Respuesta #4 en: 22 Mayo 2017, 20:20 pm »

¿sabes como funciona un debugger a nivel interno? Deberias empezar por comprender como estan programados, y luego puedes adaptarlo a tu lenguaje

por cierto, buen trabajo por ese lenguaje, hace tiempo que le sigo la pista, sigue asi!
En línea

Curso de ensamblador desde cero
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: ¿Como programar un depurador avanzado?
« Respuesta #5 en: 22 Mayo 2017, 22:24 pm »

La notación "Backus Naur Form", es un metalenguaje que se utiliza para describir lenguajes, de ahí es tremendamente fácil verificar errores.

Si tienes descrito, por ejemplo:
<numero> = <numero> <digito>
<digito> = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
entonces resulta tremendamente fácil verificar que FF, no es un número y sí 135. Pero si describes:


<separador> = [[<separador>]] <espacio> | <tabulador>
<espacio> = " "
<tabulador> = "    "
<numero> =  <separador> (<numerodecimal>| "h" <numerohexadecimal>)
<numerodecimal> = [[<digitodecimal>]] | <numerodecimal> <digitodecimal>
<numerohexadecimal> = [[<digitohexadecimal>]] | <numerohexadecimal> <digitohexadecimal>
<digitodecimal> = <digito>
<digitohexadecimal> = <digito> | <digitohex>
<digito>   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<digitohex> = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f"

Es fácil ver si un número cumple las normas y si en ese caso es decimal o hexadecimal, etc... por ejemplo: 135, hFF, y por ejemplo es fácil ver que hFFJ no es un número ni decimal ni hexadecimal, así como tampoco 134p0, pero no hemos definido un número decimal, por ejemplo 234'456.

Como se puede ver, ahí está definido que es un número, y se puede ver que acepta números decimales y hexadecimales y es relativamente fácil verificar.
Básicamente hay que escribir una función por cada definición, que chequea sus partes llamando a su vez a cada una de las funciones de las partes de que se compone... (hasta llegar a la básica que son letras, digitos, etc... cuando una funciópn devuelva false, se señala el punto donde está operando y se marca el error (cada función conoce por la expesión que trata, en qué consiste el error).

Igualmente es relativamente fácil describir, operadores, operaciones, funciones, propiedades, clases, etc...


Cuando se cambia de línea se verifica la que se acaba de editar. Además se puede (si es correcto) al final si se detecta una construcción especial, autocompletar partes de esa construcción, o sugerir opciones... al tiempo que si es incorrecto, señalar que falla.

Si nunca has oído hablar de ello, será por que nunca has estudiado teoría de compiladores.

p.d.: Un poco más completo, para ver mejor la potencia del sistema BNF. Tú mismo puedes describir las reglas de tu propio BNF, que eso lo hace además insuperable.
« Última modificación: 23 Mayo 2017, 00:12 am por NEBIRE » En línea

Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Re: ¿Como programar un depurador avanzado?
« Respuesta #6 en: 22 Mayo 2017, 23:19 pm »

¿sabes como funciona un debugger a nivel interno? Deberias empezar por comprender como estan programados, y luego puedes adaptarlo a tu lenguaje

por cierto, buen trabajo por ese lenguaje, hace tiempo que le sigo la pista, sigue asi!


Si, he estudiado sobre depuradores y se como escribirlos, su estructura es muy simple, el problema que tengo es al momento de querer sincronizar los ejecutables depurados con código en texto plano.
La notación "Backus Naur Form", es un metalenguaje que se utiliza para describir lenguajes, de ahí es tremendamente fácil verificar errores.

Si nunca has oído hablar de ello, será por que nunca has estudiado teoría de compiladores.

Pues mi experiencia con compiladores se basa en prueba y error. :P
Aunque tu explicación me recuerda a mi análisis previo antes de escribir el analizador sintáctico :laugh:
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: ¿Como programar un depurador avanzado?
« Respuesta #7 en: 22 Mayo 2017, 23:51 pm »

No sé mucho de compiladores, pero vas a tener un trabajo muy grande para hacer un debugger en el mismo IDE (si pensamos en algo como Visual Studio o similar).

Calculo que vas a tener que crear una VM en el IDE que entienda y ejecute un lenguaje intermedio generado a partir de las instrucciones. Incluso estaría muy cercano al analizador sintáctico, con la diferencia que debería ejecutar el código; por lo que debería tener su stack, registros, etc.

No creo que el código compilado te sea de utilidad ya que ahí pierdes todas las referencias al source.

En fin, es lo que se me ocurre con mi escaso conocimiento en el tema.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: ¿Como programar un depurador avanzado?
« Respuesta #8 en: 23 Mayo 2017, 00:19 am »

Créeme, no te compliques con tonterías, escribirás código infinito y siempre habrá errores imperceptibles y será muy lento, largo y complejo. cualquier cambio te dará una pereza enorme.

Describe tu lenguaje en notación BNF, luego te será tremendamente sencillo tratar semántica y sintaxis, incluso el mismo lenguaje ampliado te vale hasta para colorear (si asocias colores a cada identidad individual).

Lo mejor del BNF, es que puedes adaptarlo a tus necesidades e incluso sirve como ayuda para los usuarios al mostrar el BNF de tu lenguaje, pués sirve para saber qué se puede y qué no se puede hacer en él...

He editado mi mensaje anterior, para extenderme un poco y con más explicaciones...

Te adjunto, un ejemplo de como se describió, por ejemplo el lenguaje Algol 60, menos potente que el Algol 68, pero te sirve de ejemplo:
https://web.archive.org/web/20060925132043/https://www.lrz-muenchen.de/~bernhard/Algol-BNF.html



-----------------------------
----------------------------
Mensaje ORIGINALMENTE publicado en: Fecha del día 23 de mayo (por la tarde, hora de España) -------------
Me he molestado en buscar la especificación del EBNF (Extended-BNF), es más legible, cuando se describe en EBNF, que en BNF y las descripciones son más breves. Otra ventaja es que el analizador léxico, queda mucho más aproximado con EBNF.
El enlace de descarga (dentro del zip está el pdf):
http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip

Dado que (BNF) es tremendamente sencillo usarlo (bastan unas pocas horas para entenderlo bien), luego puedes ampliarlo y adaptarlo a tus necesidades.

MOD: Ya deberías saber que debes hacer doble post.

--------------------------------------------------------

Mensaje para el MOD: Por doble post, yo entiendo duplicar el mismo contenido de un mensaje en otra parte del foro (ya sería feo, hacerlo en el mismo sitio). Publicar un mensaje un día y otro mensaje otro día (aunque no haya un mensaje de nadie por medio, en le mismo hilo, JAMAS podré entenderlo como hacer doble post... la razón es muy simple: EDITAR un mensaje, no avisa a los interesados del cambio, publicar un nuevo mensaje posiblemente se vea, en cualquier caso son publicaciones distintas.
Por otro lado, determinados foros, reúnen en un mismo mensaje dos mensajes publicados por la misma persona en el mismo hilo, si no ha pasado cierta cantidad de tiempo, al momento de enviar.

Yo acostumbro a escribir mi mensaje y salvo que ponga código y crea conveniente repasarlo para corregir algún posible error, salto a otro lado, sin llegar a ver si hizo una u otra cosa. Los automatismos del foro, no me competen, creo que hay cierta capacidad de control desde el panel de administración del foro... y supongo que estará en las opciones que dueño del foro, le haya parecido más aceptable.
« Última modificación: 24 Mayo 2017, 03:32 am por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Depurador
Ingeniería Inversa
Blue_box 3 2,441 Último mensaje 13 Septiembre 2004, 22:09 pm
por Blue_box
[Source] Crear ColorPicker avanzado (como em Photoshop)
Programación Visual Basic
Mad Antrax 2 3,110 Último mensaje 27 Junio 2007, 00:07 am
por ranslsad
Cómo intercambiar depurador al depurar?
Ingeniería Inversa
t4r0x 4 2,485 Último mensaje 12 Noviembre 2014, 15:22 pm
por t4r0x
Cómo habilitar el teclado virtual avanzado de Windows 10
Noticias
wolfbcn 0 974 Último mensaje 10 Marzo 2016, 17:56 pm
por wolfbcn
Programar depurador
Programación General
Yuki 0 1,608 Último mensaje 16 Diciembre 2016, 21:26 pm
por Yuki
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines