2009-03-26 15 views

Respuesta

16

Con una base de código complejo, el mayor error que puede cometer es tratar de ser una computadora. Obtenga la computadora para ejecutar el código y use un depurador para ayudar a descubrir qué está pasando.

  1. encontrar la manera de compilar, instalar y ejecutar su propia versión del vino desde el código fuente existente.

  2. Conozca cómo depurar (por ejemplo, use gdb) en una instancia en ejecución de su versión de Wine.

  3. Ejecute Wine debajo del depurador y haga que demuestre el comportamiento no deseado.

  4. La parte divertida: encuentre dónde va la ruta de ejecución del código y comience a aprender cómo va todo junto.

Sí, leer muchos códigos ayudará, pero el compilador/depurador/computadora puede ejecutar el código mucho más rápido que usted.

4

Acércate. Piensa en una pregunta que te gustaría que respondiera y trata de encontrar la respuesta. Cuando te canses de leer el código, ve a leer la lista de distribución de dev, developer's guide o the wiki.

Desafortunadamente, no existe un camino real para comprender una gran base de código. Si disfrutas de ese tipo de cosas (yo sí), te espera un poco de diversión. Si no, las guías no serán de gran ayuda, por lo que en realidad no estás mucho peor.

4

Busque una característica peculiar que le interese mejorar. Busque su implementación. Una vez que lo hayas encontrado, tira de esa pajita y todo lo demás seguirá.

6

La mejor manera de familiarizarse con una gran base de código es sumergirse. Muchos proyectos tienen una lista de tareas fáciles que deben realizarse, y generalmente están reservados para ayudar a facilitar la entrada de personas. Debe encontrar y trabajar en algunos de estos; aprenderá mucho sobre el esquema general del código y la estructura, contribuirá al proyecto y obtendrá una recompensa fácil que lo ayudará a impulsar tareas más grandes.

Como la mayoría de los proyectos, WINE tiene buenos recursos disponibles para sus desarrolladores; IRC, wiki, lista de correo y guías/resúmenes. Con la mayoría de las bases de datos desalentadores, no es tan aterrador después de las primeras correcciones. WINE es realmente grande, y al igual que el kernel, dudo que haya ningún experto en todos los sistemas; no sientas que necesitas serlo tampoco Comienza a trabajar en algo que te importa y tómalo desde allí.

He comenzado algunos parches para VINO yo mismo, y es una buena comunidad y una buena estructura. Hay muchos mensajes de depuración muy útiles, y es un proyecto realmente genial para trabajar, por lo que te ayuda a jugar más tiempo también.

Todos apreciamos su valentía y su voluntad de ayudar con el VINO (lo necesita). Gracias y buena suerte.

2

La mejor manera es mediante comentarios. Estoy siendo irónico, ya que entiendes pequeños fragmentos de la bestia agregan comentarios para que puedas seguir tu rastro. Los otros desarrolladores también lo disfrutarán si agrega las guías faltantes en el código.

+0

Siempre dudo cuando empiezo a hacer esto, cuando estoy aprendiendo acerca de una base de código mi comprensión de la misma es deficiente y cualquier comentario que tenga sobre el código también será deficiente. Agregar comentarios para usted, por lo que temporalmente no es un problema, pero dejarlos para otros puede causar más confusión. –

1

Una buena forma de entender un sistema grande es dividirlo en partes constitutivas y enfocarse en rutas específicas a través de la aplicación.

Su depurador es su amigo aquí, establezca un punto de interrupción en el hilo que desea investigar entonces el paso a través de línea por línea mirando en la que cada parte hace ... espero que ayude ...

+0

Whoops es el estándar para eliminar su propio duplicado si alguien lo hace justo antes de usted? – ojblass

+0

No tengo idea de qué estás hablando ... – Jon

2

Como otros tienen sugerido, ¡indague! Lea toda la documentación disponible que puede absorber. Luego, vea si puede encontrar otras personas que estén interesadas o bien informadas y que aprendan con ellos. Ayuda a que las personas intercambien ideas y hagan preguntas.

Para el código fuente C, una vez que tenga una idea de las áreas del código en las que desea trabajar, genere las bases de datos ctags y cscope para ese código. Estas herramientas hacen que sea mucho más fácil saltar y comprender el código.Muchos editores de texto (un ejemplo es gvim) tienen soporte para ctags y cscope para que pueda saltar fácilmente.

2

Trate de implementar un pequeño pequeño cambio en el código, algo que será visible para usted. Eso podría ser encontrar una forma viable de generar saldos de depuración (y averiguar dónde aparece el resultado), podría estar cambiando el tamaño predeterminado de Windows o el color del escritorio, o algo así. Una vez que puede hacer que algo suceda en la base de código, ha arañado la superficie de la comprensión y puede comenzar a avanzar hacia cosas más complicadas. En ese punto, seleccione un objetivo de algo ligeramente más útil que le gustaría que hiciera el código, e impleméntelo. O mira el rastreador de errores del proyecto y busca algo pequeño para empezar.

Documente sobre la marcha, y escriba pruebas de unidad sobre la marcha, y refactorice sobre la marcha. Cuando descubres lo que hace una rutina, ¡coméntalo!

+0

Preferiría usar el método de depuración paso mencionado en otro lugar, CUANDO pueda. Algunas veces no puedes. En ese caso, "Kilroy estuvo aquí" puede ser un acto útil de desesperación. "¿Es esto incluso el código que se ejecuta para hacer la función X?" – Roboprog

7

(Esta es una respuesta que me envió a una pregunta de un tiempo atrás. He modificado un poco para adaptarse a esta pregunta.)

La experiencia me ha demostrado que hay 3 objetivos principales que tiene el aprendizaje de un sistema heredado :

  1. Conozca qué se supone que debe hacer el código.
  2. Aprende cómo lo hace.
  3. (crucial) Aprenda por qué las hace de la manera que lo hace.

Las tres partes son muy importantes, y hay algunos trucos para ayudarlo a comenzar.

En primer lugar, resista la tentación de simplemente presionar ctrl-click (o lo que sea que use su IDE) a su manera alrededor del código para comprender todo. Probablemente no puedas mantener todo en perspectiva en tu mente de esta manera, especialmente cuando cada línea te obliga a mirar muchas otras clases para entender qué es, así que debes ser capaz de mantener varios niveles del apila en tu cabeza.

Lea la documentación cuando sea posible; generalmente te ayuda a obtener rápidamente un marco mental sobre el cual construir todo lo que sigue.

Ejecute casos de prueba cuando sea posible.

No tenga miedo de preguntarle a alguien que sabe si tiene alguna pregunta. De acuerdo, no debe perder el tiempo de otros con consultas inane, pero si hay algo que simplemente no entiende (esto es especialmente cierto con preguntas más conceptuales como, "¿No tendría mucho más sentido implementar esto como una ___ "o algo así), es probable que valga la pena buscar la respuesta antes de meter la pata y no se por qué.

Cuando finalmente se acostumbre a leer el código, comience en un lugar lógico "principal" e ir desde allí. No solo lea el código de arriba a abajo, o en orden alfabético, o cualquier cosa (esto es probablemente obvio).

+2

Entender los "por qué" es lo más desafiante, al menos para mí. – George

+0

En un programa como WINE, la parte "por qué" normalmente va a ser "porque eso es lo que hace Windows", ¿verdad? –

10

Un profesor nos dijo una vez que comparemos esta situación con escalar una montaña. Es posible que esté escuchando a alguien que hizo esto y le dice lo que es mirar al campo. Y tú crees sin dudar que es un espectáculo espectacular.

Sin embargo, debe comenzar a escalar para comprender realmente cómo es la vista desde la parte superior.

Y no es tan importante subir todo el camino hasta la cima. Puede ser perfectamente suficiente solo para alcanzar una altura justa sobre el nivel del suelo.

Pero nunca tengas miedo de comenzar a escalar. La vista siempre vale la pena cualquier esfuerzo.


Esto siempre ha sido una buena analogía para mí. Sé que esta pregunta era más acerca de consejos específicos sobre cómo tratar eficientemente las bases de código una vez que comenzaste a escalar. Sin embargo, al instante me recordó a nuestras clases de física en aquel entonces.

2

(advertencia: la comercialización descarada por delante)

Para los desarrolladores de Java usando Eclipse, hay nWire. Es un complemento de Eclipse para navegar y visualizar grandes bases de código.

Cuestiones relacionadas