¿Cómo ubicar el código fuente que implementó cierta característica? [cerrado]

14

Me preguntaba cuáles son algunas técnicas para localizar qué código implementó una característica específica, en una aplicación de escritorio.

Soy un desarrollador junior, con solo experiencia en programación profesional en la programación web. En la web es más fácil hacer eso. Por ejemplo, usted "inspecciona" un botón con las herramientas del navegador, y puede ver lo que se está haciendo al hacer clic en él. Y luego, suponiendo que tiene el código fuente completo, puede profundizar la jerarquía de las llamadas.

¿Pero cómo haces esto en las aplicaciones de escritorio? Al menos, ¿sin tener que sumergirse en el código base completo?

    
pregunta py_script 08.03.2014 - 23:44

3 respuestas

21

Seguimiento posterior

El seguimiento hacia atrás es ubicar un punto final en un evento asociado con la función (ver más abajo). Una vez allí, se coloca un punto de interrupción en el depurador. La característica se activa y cuando el depurador se detiene. La pila de llamadas se revisa para rastrear la ruta de la llamada. Mientras recorre la pila de llamadas, puede tomar notas sobre estados variables o colocar nuevos puntos de interrupción para inspeccionar el evento nuevamente.

La función vuelve a activarse y el depurador se detiene en los nuevos puntos de interrupción. A continuación, puede repetir rastreo de retroceso o realizar rastreo de avance hasta que se encuentre el objetivo.

Pros y amp; Contras

  • Siempre es más fácil subir la pila de llamadas y ver cómo llegaste a alguna parte.
  • Puede haber millones de condiciones que deben cumplirse antes de llegar a un punto final. Si ya conoces el punto final, te has ahorrado mucho trabajo.
  • Si la característica está rota. Es posible que nunca llegue al punto final, y se puede perder tiempo tratando de averiguar por qué.

Descubrimiento de puntos finales

Para depurar una característica, debe saber en qué parte del código fuente se alcanza el objetivo final. Solo desde este punto puedes retroceder para ver cómo llegó el código allí. Un ejemplo; Para entender cómo se realiza el deshacer. Sabes en qué parte del código se deshacen las cosas, pero no sabes cómo llegan las cosas . Esto sería un candidato para backtracing para averiguar cómo funciona la función.

Rastreo hacia adelante

El seguimiento hacia adelante está localizando un punto de inicio para un evento asociado con una función (ver más abajo). Una vez allí, los mensajes de registro se insertan en el código fuente o se establecen puntos de interrupción. Este proceso se repite a medida que avanza más lejos del punto de inicio hasta que descubra el objetivo para la función.

Pros y amp; Contras

  • Es el punto de inicio más fácil para encontrar una función.
  • La complejidad del código reduce la eficacia del rastreo hacia adelante. Cuantas más condiciones haya en el código, mayor será la posibilidad de que vayas en la dirección equivocada.
  • El seguimiento hacia adelante a menudo da como resultado la configuración de puntos de interrupción que se activarán por eventos no relacionados. Interrumpir el proceso de depuración e interferir con su búsqueda.

Descubrimiento del punto de inicio

Puede usar palabras clave, identificadores de interfaz de usuario (identificadores de botones, nombres de ventanas) o detectores de eventos fáciles de encontrar asociados con la función. Por ejemplo, podría comenzar con el botón que se usa para activar una función deshacer .

Proceso de eliminación

Puedes ver esto como el punto medio en comparación con las posiciones punto inicial y punto final . Realiza un proceso de eliminación cuando ya sabe que un fragmento de código se utiliza en una función, pero no es el principio ni el final de la función.

La dirección que tome desde el punto medio depende del número de entradas y salidas. Si el fragmento de código se usa en muchos lugares, entonces volver a rastrear desde esta posición podría llevar mucho tiempo, ya que todos tienen que ser inspeccionados. A continuación, emplee un proceso de eliminación para reducir esta lista. Como alternativa, puede realizar un rastreo hacia adelante desde este punto, pero nuevamente, si el fragmento de código se ramifica a muchos lugares, esto también puede ser un problema.

Tienes que reducir las direcciones de posición al no seguir rutas que claramente no se ejecutarán para la función. Mover más allá de este código y solo colocar puntos de interrupción donde probablemente esté relacionado con la función.

La depuración de

punto medio a menudo requiere más funciones IDE avanzadas. La capacidad de ver jerarquía de códigos y dependencias. Sin esas herramientas es difícil de hacer.

Pros y amp; Contras

  • Los puntos intermedios son a menudo el primer trozo de código que aparece en tu cabeza cuando piensas en la característica. Te dices a ti mismo "Ah, eso tiene que usar XXXX para funcionar".
  • Los puntos intermedios pueden revelar puntos de inicio lo más fácil.
  • Los puntos intermedios pueden ser una forma fácil de encontrar el camino a una función cuando se pierden por la sincronización o los cambios de subprocesos.
  • Los puntos intermedios pueden llevarlo al código con el que no está familiarizado. Le cuesta tiempo aprender lo que está pasando.
respondido por el cgTag 09.03.2014 - 00:54
10

Suponiendo que la función está vinculada a alguna cosa de la interfaz de usuario, como un botón o un menú, lo que tiendo a hacer sigue (muy tedioso pero funciona). Esto es buscar en el código fuente, no usar un depurador .

  1. Busca el texto (con suerte distintivo) en el botón, por ejemplo, "Super Feature X3".
  2. Probablemente esté en un archivo con alguna constante, por ejemplo, %código%. Para futuras referencias, recuerde este nombre de archivo.
  3. Puede haber otra capa (incluso de dos) de abstracción, sigue buscando para obtener la Cadena "real" que utiliza el Botón. Tenga en cuenta cómo se hace para el futuro.
  4. Ahora busca en esa constante. Esperemos que haya encontrado el botón. Tal vez ahí es donde se conectan los ActionListener. (Estoy tomando Java-ese aquí, YMMV, pero el concepto sigue siendo válido)
  5. Si es necesario, busque en ese botón y finalmente encontrará dónde se conecta a un Oyente.
  6. Tal vez ese oyente realmente redirecciona a otros oyentes (la funcionalidad "real") en función de la constante, si es así, siga eso si / else o la declaración del caso. NOTA : Si hay un problema central, este es un gran lugar para configurar puntos de interrupción .
  7. Finalmente, debes estar en el código real.

Como señaló @amon, a veces un depurador es más simple ...

    
respondido por el user949300 09.03.2014 - 00:16
3
  • Si puede encontrar cualquier código relacionado, puede usar su software de control de fuente para mostrarle la confirmación completa o las confirmaciones cercanas que la agregaron. Eso debería mostrarle todo lo que se requería para implementar esa característica.

  • Una forma fácil de encontrar un punto de partida para mirar sería ir a través de su código base buscando el texto del botón.

  • A menudo, las personas colocan un ID de problema de su rastreador de problemas en sus mensajes de confirmación. Si puede encontrar un problema que describa la solicitud de función, entonces puede buscar confirmaciones con ese ID de problema.

respondido por el Michael Burge 09.03.2014 - 01:46

Lea otras preguntas en las etiquetas