Autor
|
Tema: ¿Como programar un depurador avanzado? (Leído 4,384 veces)
|
Yuki
Desconectado
Mensajes: 80
El error es una muestra de la incompetencia.
|
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
|
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
|
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
Mensajes: 80
El error es una muestra de la incompetencia.
|
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
|
¿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
|
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
Mensajes: 80
El error es una muestra de la incompetencia.
|
¿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. Aunque tu explicación me recuerda a mi análisis previo antes de escribir el analizador sintáctico
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
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
|
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).zipDado 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Depurador
Ingeniería Inversa
|
Blue_box
|
3
|
2,652
|
13 Septiembre 2004, 22:09 pm
por Blue_box
|
|
|
[Source] Crear ColorPicker avanzado (como em Photoshop)
Programación Visual Basic
|
Mad Antrax
|
2
|
3,268
|
27 Junio 2007, 00:07 am
por ranslsad
|
|
|
Cómo intercambiar depurador al depurar?
Ingeniería Inversa
|
t4r0x
|
4
|
2,750
|
12 Noviembre 2014, 15:22 pm
por t4r0x
|
|
|
Cómo habilitar el teclado virtual avanzado de Windows 10
Noticias
|
wolfbcn
|
0
|
1,171
|
10 Marzo 2016, 17:56 pm
por wolfbcn
|
|
|
Programar depurador
Programación General
|
Yuki
|
0
|
1,772
|
16 Diciembre 2016, 21:26 pm
por Yuki
|
|