tipos studio sirve que para movil integrados informatica entornos desarrollo depurar depuradores debugger debug aplicacion debugging

debugging - studio - que es un debug y para que sirve



¿Por qué no se enseña a los estudiantes a usar un depurador? (19)

Hay muchas preguntas sobre la tarea aquí en SO.

Supongo que el 90% + puede resolverse recorriendo el código en un depurador y observando el estado del programa / variable.

Nunca me enseñaron a usar un depurador. Simplemente imprimí y leí el manual de GDB y revisé sus ejemplos. Cuando utilicé Visual Studio por primera vez, recordé haber pensado: ¡Guau! cuánto más sencillo puede ser esto, haga clic para establecer un punto de interrupción, pase el mouse sobre una variable para el valor, presione una tecla para pasar, la ventana inmediata, debug.print, etc.

En cualquier caso, ¿se "enseña" a los estudiantes a usar un depurador? ¿Si no, porque no? (Quizás una pregunta mejor es, ¿por qué no pueden aprender a usar un depurador ellos mismos? Tal vez necesiten que se les diga que existe una herramienta que puede ayudarlos ...)

¿Cuánto tiempo se tarda en aprender a usar un depurador?


Apostando una hipótesis basada en mi experiencia como profesional de asistencia técnica y aspirante a profesor de CS:

En realidad, confundiría a los niños que tienen poca o ninguna experiencia en programación más de lo que ayudaría (descubierto conmigo aquí ...)

Ahora, primero que todo: estoy completamente de acuerdo en que enseñar a usar un depurador sería una gran cosa, pero creo que la barrera para hacerlo se debe al problema mayor y sistemático de que la ingeniería de software y la informática no son carreras independientes. La mayoría de los programas de CS requerirán 2-4 clases en las que aprender a codificar es el enfoque. Después de esto, se requiere capacidad de codificación pero no el tema de la clase.

Para mi punto principal: es muy difícil enseñar algo con el disfraz de "no entiendes esto ahora, sino que lo haces porque será útil más adelante". Puedes intentarlo, pero no creo que realmente funcione. Esto es una extensión de la idea de que la gente realmente solo aprende haciendo. Pasar por los movimientos pero no entender por qué no es lo mismo que hacer.

Creo que los niños que aprenden a codificar por primera vez no van a entender por qué usar un depurador es más efectivo que insertar líneas de impresión. Piense en un script de tamaño pequeño a mediano que codifique: ¿usaría el depurador para evitar un comportamiento extraño o algún error que no pudo resolver rápidamente? No lo haría, parece que solo me retrasaría. Pero, cuando se trata de mantener el gran proyecto en el que trabajo todos los días, el depurador es invaluable más allá de toda duda. Cuando los estudiantes llegan a la parte del currículo que requiere grandes proyectos, ya no están en una clase que se enfoca en la codificación general.

Y todo esto me lleva a mi asombrosa idea. Creo que todos los profesionales de CS deberían hacer cuando enseñan cómo codificar: en lugar de pedirles proyectos a los niños, de vez en cuando, déles un gran código complejo y pídales que lo solucionen. los insectos. Esto les enseñaría a usar un depurador.


Descubrimos que hay mucha actitud negativa hacia los depuradores entre la academia y los programadores de sistemas experimentados. Me he topado con un programador bastante talentoso que afirmó que "los depuradores no funcionan, solo uso archivos de registro". Justo lo suficiente, para las aplicaciones de servidor de subprocesos múltiples, debe tener registro, pero no se puede negar que un depurador es útil para el 99% del código que no es de subprocesos múltiples.

Al responder a su pregunta, sí, los depuradores deben cubrirse en el programa de programación, pero como una de las herramientas para depurar un programa. El rastreo y el registro también son importantes.


Desde un punto de vista práctico, lo más probable (debido a políticas o restricciones técnicas) no puede usar un depurador en una aplicación de producción . No usar el depurador como una muleta promueve agregar la cantidad adecuada de registro a su aplicación.


Después de haber reclutado en 4 universidades (Rensselaer, Purdue, Ohio State, Universidad de Washington), los estudiantes que escriben el código de dinero para las incubadoras asociadas con su universidad tienden a aprender el arte de depurar realmente bien porque las empresas de incubación quieren que las personas resuelvan problemas y hagan en menos horas e invierta algo de tiempo para enseñarles a usar buenas técnicas de depuración. Dependiendo de la sofisticación de la compañía incubadora en particular, pueden invertir en patrones de mentoría y rendimiento para ayudar al estudiante a ser más productivo para ellos, pero a menudo la depuración es la primera inversión.

Dejando a las clases tradicionales de cs, los estudiantes no parecen alejarse con el mismo conjunto de habilidades que les ayuda a reducir un problema, manipular los datos mientras se ejecuta el programa / servicio / página / sitio / componente y realmente entender las implicaciones de lo que han escrito contra lo que necesitaban escribir para hacerlo bien.

Fui a Rensselaer y "aprendí por mi cuenta" porque me pagaron una tarifa plana para algunos proyectos y quería minimizar mi propio tiempo dedicado a la programación. Además, se hizo cumplir al trabajar como pasante @Microsoft en 1994, donde obtuve para ver qué tan útil era realmente un entorno de desarrollo integrado.


En la escuela secundaria nos enseñaron a depurar escribiendo cosas en la consola.

En la universidad, nos enseñaron una combinación de eso más usando un depurador.

Las herramientas solo se han vuelto más fáciles de usar, por lo que realmente no estoy seguro de por qué no se enseña.


En mi escuela secundaria y en la universidad, a la mayoría de las personas en las clases realmente no les importaba la programación.


Esta es una buena pregunta para hacerle a la facultad de su escuela.

En mi universidad, dieron un ejemplo muy breve de depuración, luego nos señalaron los archivos de "ayuda" y los libros.

Quizás no lo enseñan porque hay tantas cosas que cubrir y muy poco tiempo para los profesores. Los profesores no van a tomar la mano de todos.


Hay más que unas pocas preguntas aquí, en mi opinión. Aquí hay algunos que se preguntan y algunos que yo inferiría:

Me enseñaron en BASIC y Pascal inicialmente, generalmente con un intérprete que facilitó la ejecución del programa hasta que algo explotó. No teníamos puntos de interrupción o muchas de las cosas elegantes que hay ahora para rastrear a través del código, aunque esto habría sido desde 1983-1994 usando un Commodore 64, Watcom BASIC y Pascal en una Mac.

Incluso en mis últimos años universitarios, no teníamos un depurador. Si nuestro código no funcionara, teníamos declaraciones impresas o realizábamos un seguimiento manual, en términos de tiempo, esto habría sido 1995-1997.

Un problema con un depurador es que, para algo como Visual Studio, ¿tiene alguna idea de cuánto podría demorar pasar por todas las funciones que tiene para la depuración? Eso podría llevar años en algunos casos, creo. Esto es sin entrar en todas las opciones de compilación y otras cosas que puede hacer que uno pueda usar eventualmente. Otro punto es que para todas las cosas buenas que brinda un depurador, hay algo que decir acerca de cómo las cosas complejas pueden obtener, por ejemplo, al usar un punto de interrupción en VS, está la pila de llamadas, las variables locales, las ventanas de vigilancia, la memoria, el desmontaje y otros. cosas que uno podría querer examinar mientras se detiene la ejecución.

Los conceptos básicos sobre el uso de un depurador se podrían aprender en aproximadamente una semana, creo. Sin embargo, para llegar al punto de dominar lo que hace un depurador, cuánto pasa cuando se está ejecutando el código y dónde se está ejecutando, ya que hay varios lugares donde se pueden ejecutar cosas como GPU para ir junto con la CPU. toma mucho más tiempo y me preguntaría cuántas personas tienen ese tipo de manejo, incluso en la escuela.


La misma razón por la que a los estudiantes no se les enseña el control de versiones, las pruebas de unidad, los scripts de shell, la edición de textos, la redacción de documentación o incluso (más allá de los cursos de introducción) los lenguajes de programación. La clase es sobre ciencias de la computación, generalmente un solo concepto o familia de conceptos, no programación. Se espera que aprendas lo que necesitas.

Esto no es exclusivo de la informática. Mis clases de química (también tengo un título de química) tampoco me enseñaron a usar ningún equipo de laboratorio de química. Aprendiste eso dando vueltas en el laboratorio, observando a otros estudiantes y preguntando a los viejos profesionales canosos que estaban allí.


Los debuggers se introdujeron en mi segundo curso de Introducción a C, si recuerdo bien. Por supuesto, el problema con el que luchaban la mayoría de los estudiantes era compilar su trabajo, con lo que el depurador no ayudaría. Y una vez que el programa de la línea de comandos de diez líneas se compila y luego se bloquea, bueno, ya tienen algunos printfs allí. Luchar para dominar GDB es una exageración.

En mi experiencia, es bastante raro tratar realmente con una base de código lo suficientemente grande como para hacer más que una familiarización superficial con un depurador que valga la pena el tiempo invertido en la mayoría de los Comp. Currículos de ciencia ficción. Los programas son pequeños y los problemas a los que se enfrenta están más en la línea de averiguar la complejidad espacio-temporal de su algoritmo.

Los depuradores se vuelven mucho más valiosos en los proyectos del mundo real, donde tienes una gran cantidad de código escrito por diferentes personas en diferentes momentos para rastrear lo que sigue frotándose antes de la llamada a la barra ().


Me enseñaron a usar un depurador en la universidad. No mucho, tarde (debería ser casi la segunda cosa que enseñar), pero me enseñaron a mí.

De todos modos, es importante enseñar a DEBUG, no solo a "usar un depurador". Hay situaciones en las que no puede depurar con gdb (por ejemplo, intentar depurar un programa que ejecuta 10 subprocesos simultáneos) y necesita un enfoque diferente, como el printf antiguo. Ciertamente puedo estar de acuerdo contigo en que, por lo general, uno aprende y hace uso de técnicas de depuración mucho más tarde que la primera vez que puedas usarlas.


Me enseñaron en mi primera clase de CS cómo usar un depurador. No me sirvió mucho establecer puntos de interrupción y revisar mi código cuando la mayor parte de lo que escribí fue "¡Hola mundo!". A partir de ese momento, prácticamente ignoré al depurador hasta que aprendí a usar GDB en un curso mucho más avanzado mientras trabajaba en una tarea de "bomba binaria".

Desde que estuve fuera de la escuela y trabajando, he pasado mucho más tiempo usando un depurador y aprendiendo lo útil que puede ser. Yo diría que aprender a usar un depurador incluye tres cosas: la necesidad de uno, que se le enseñe / aprender a usar uno, y la experiencia de saber cómo usar uno en su beneficio.

Además, pasar un tiempo aprendiendo "depuración de eco" puede valer la pena para aquellas situaciones en las que un depurador no está disponible / es necesario. Eso es solo mi $ 0.02.


No creo que el problema sea la enseñanza. El uso de un depurador gráfico moderno no es ciencia espacial (al menos no para la mayoría de los programas en modo usuario que se ejecutan en una sola computadora). El problema es con las actitudes de algunas personas. Para utilizar un depurador de manera efectiva, debe:

  • Admite que es tu culpa y select no está roto .
  • Tenga la perseverancia de pasar un par de noches depurando, sin olvidar el punto anterior.
  • No hay un algoritmo específico a seguir. Debes adivinar educadamente y razonar efectivamente a partir de lo que ves.

No muchos no programadores tienen estas actitudes. En la universidad, he visto a muchos amigos que se dan por vencidos después de un período de tiempo relativamente corto, me traen un código y me dicen que la computadora está haciendo algo mal. Generalmente les digo que confío en su computadora más que ellos (y esto duele algunos sentimientos, pero así es como es).


No del todo relacionado, pero las personas necesitan usar los depuradores no solo para la depuración sino también para entender el código de trabajo.


No me enseñaron a usar un depurador en mi licenciatura, porque no se puede usar un depurador en una baraja de tarjetas perforadas. Incluso las declaraciones impresas son un lujo si tiene un tiempo de respuesta de 15 minutos en "trabajos", etc.

No estoy diciendo que a la gente no se le deba enseñar a usar depuradores. Solo que también es importante aprender a depurar sin esta ayuda, porque:

  1. le ayudará a comprender mejor su código si no tiene que depender de un depurador, y
  2. hay situaciones donde un depurador sofisticado no estará disponible.

En este último punto, también puedo recordar la depuración de un prom de arranque en un dispositivo integrado utilizando un analizador lógico (bastante costoso) para capturar lo que estaba sucediendo en las direcciones / líneas de datos.


Porque no hay libro de texto sobre depuración, punto.

De hecho, es muy difícil crear una situación de enseñanza donde obtener el incentivo para usar un debuigger. Las tareas típicas son demasiado simples para requerir realmente un depurador. Greg Wilson planteó ese tema en el taller SUITE del año pasado, y el consenso fue que es muy difícil lograr que los estudiantes usen un depurador. Puede informarles sobre la depuración, pero crear una situación en la que realmente sientan el dolor de recurrir al depurador es difícil.

¿Tal vez una conferencia sobre el juego del crack podría motivar a los estudiantes a pasar por el juego con un depurador? Al menos, esa fue la razón por la que me dije a mí mismo cómo usar un depurador cuando tenía 12 años :)


Si por estudiantes te refieres a estudiantes de informática, creo que la respuesta es bastante obvia. El tema de los cursos es generalmente teoría, con el lenguaje de programación / marco / biblioteca como ayuda. El profesor no puede profundizar mucho en una herramienta en particular, ya que le quitaría tiempo enseñando redes o sistemas o lo que sea. Tal vez si hubiera un curso llamado "Programación del mundo real" o algo así, cubrirían a los depuradores, pero en general no veo demasiados errores en esperar que los estudiantes lean la documentación del idioma / herramienta para completar el trabajo del curso. .


Su pregunta es similar a "¿Por qué a los estudiantes no se les enseñan las pruebas de software"? Estoy seguro de que lo hacen en algunos lugares, pero normalmente las Universidades / Colegios se apegan a enseñar las cosas "interesantes" teóricas de la informática y tienden a no enseñar las herramientas prácticas. Por ejemplo, si tomas inglés en la escuela, te enseñan a escribir, no cómo usar MS Word (sí, estoy seguro de que hay algunos cursos de Word, pero entiendes mi punto).


Voy a poner en una nota de advertencia en el otro lado. Aprendí a programar con Visual Basic y Visual C (mediados de los 80), y los depuradores estaban integrados y eran fáciles de usar. Demasiado fácil, de hecho ... Generalmente no pensé en cómo resolver un problema, simplemente lo ejecuté en el depurador y ajusté el comportamiento. Oh, esa variable es demasiado alta ... ¡Debo tener que restar una aquí!

No fue hasta que me cambié a Linux, con el combo gcc / gdb no tan fácil, que comencé a apreciar el diseño y pensar en tu código primero.

Lo admito, probablemente voy demasiado lejos al otro lado ahora. Utilizo un depurador para analizar las trazas de pila y eso es todo. Debería haber un punto medio entre analizar el problema y pasar por él en un depurador. Ciertamente, a las personas se les debe mostrar todas las herramientas disponibles también.