2009-02-17 17 views
7

Muchas veces cuando estoy viendo código de otros solo quiero encontrar dónde y cómo se define una variable. Normalmente, lo que hago ahora es buscar el tipo de variable hasta que encuentre la definición, que consume mucho tiempo. Y creo que hay algunas herramientas que pueden ayudarme en esta situación rutinaria. ¿Alguna sugerencia en algunas herramientas o comandos para ayudarme en esta tarea?¿Algún programa o truco para encontrar la definición de una variable?

Sé que al usar una GUI y crear un proyecto esto se hace automáticamente, estoy hablando de una manera de hacer esto sin una GUI. Estoy trabajando con solo el modo de texto. Me estoy ejecutando bajo Linux y estoy usando C/C++, pero las sugerencias para otros idiomas son bienvenidas.

Muchas gracias.

Una posible solución

Michel, en uno de sus comentarios proponer un simple una solución eficaz a definir nuevamente la variable, en este caso en tiempo de compilación, el compilador le informará dónde está el definiton anterior. Por supuesto, para aplicar esta solución debemos pensar previamente en la localidad de la variable.

+0

al menos podría especificar el idioma;) – devio

+0

Estoy tan en C++ que ahora mi mente solo piensa que solo existe un idioma – Eduardo

+0

El método de redefinir la variable no es una solución. Tienes diferentes espacios de nombres. Por ejemplo, si está buscando una variable llamada "promedio", puede definirla dentro de un método o función, o en otro espacio de nombres (con el mismo nombre) y no es un error. –

Respuesta

8

Edición: OK, usted dice que está usando C++. Estoy editando mi respuesta. Yo usaría el preprocesador C y luego grep para la variable. Aparecerá en primer lugar.

cpp -I...(preprocessor options here) file.cpp | grep variable 

El preprocesador de C se unirá a toda la incluye que el programa utiliza y la definición tiene que ser antes de cualquier uso de esa variable en el archivo. No es algo perfecto, pero sin un IDE o una herramienta completa de descripción/administración del idioma, solo tiene el texto.

Otra opción sería usar ctags. Comprende las sintaxis C y C++ (entre otras), y puede buscar variables y funciones utilizando herramientas de línea de comandos, emacs y vi, entre otros.

+0

Además de ctags, Semántica es otro complemento que los usuarios de Emacs pueden querer consultar: http: // cedet.sourceforge.net/semantic.shtml – codelogic

+0

Gracias, codelogic. Sí, acabo de descubrirlo y darle una oportunidad :) Gracias de nuevo. –

11

Ya has dado la herramienta más adecuada: un IDE. Esto es exactamente el tipo de cosa que sobresale en un IDE. ¿Por qué querría no querer usar un IDE si le resulta doloroso el desarrollo sin uno?

Tenga en cuenta que Emacs, Vim, etc. pueden funcionar como IDEs. No estoy hablando de forzarlo en el mundo de las GUI si desea permanecer en una situación de solo texto, p. porque estás en sshing.

(estoy realmente no tratando de ser grosero aquí. Sólo creo que haya descartado la solución obvia sin explicar por qué.)

+0

La razón por la cual descarté esa, es porque normalmente uso GUI pero ahora estoy trabajando en un pequeño proyecto en modo SSHing y solo estoy buscando algo simple. No pareces grosero. Thx – Eduardo

+0

En ese caso usaría Emacs como un IDE. Me sorprendería si no tuviera un "ir a la definición" en alguna parte. –

+0

AFAIK, Emacs no tiene esa funcionalidad lista para usar, aunque los ctags y Semantic, dos complementos, sí lo proporcionan. – codelogic

-1

Si trabaja en Microsoft Visual Studio (que creo que también podría usar para C++, pero que requeriría trabajar en una estación de trabajo con Windows) hay una opción de menú de fácil acceso para "Ir a Definición ...", que lo llevará a la definición de cualquier actualmente marcado variable, tipo o método.

+0

En la pregunta no especifico GUI porque estoy trabajando en el modo de texto – Eduardo

+0

Sin mencionar que omitió una palabra: quizás. No he encontrado que sea lo más confiable posible. Algunas veces funciona y otras no. –

-1

si insiste en quedarse en el modo de texto, puede hacerlo con emacs o vi con los complementos adecuados.

Pero realmente, muévete al siglo XXI.

EDITAR: Ha comentado que está haciendo esto a través de SSH porque necesita la velocidad de compilación del clúster del servidor remoto.

En ese caso, monte la unidad en su máquina local y use un IDE, y solo SSH para iniciar una compilación.

+0

En ocasiones, no es posible montar el disco en la máquina local. A menudo trabajo desde casa y tengo SSH porque nuestro administrador del sistema no permite que las personas monten las unidades desde el exterior. Entonces yo uso emacs también. – Frank

+0

¿Se puede configurar una conexión X remota a través de ssh? –

+0

@Mr Fooz si me lo preguntas, ni idea, tampoco quiero tener problemas con el administrador. No tengo una relación muy buena con él. – Eduardo

1

Grep para patrones comunes para declaraciones de variables. Ejemplo: *, &,> o un alfanumérico seguido de uno o más caracteres en blanco y luego el nombre de la variable. O el nombre de la variable seguido de cero o más caracteres en blanco, luego un paréntesis izquierdo o un punto y coma. A menos que se haya definido bajo circunstancias realmente extrañas (como con algún tipo de macro), funciona siempre.

+0

Sí, normalmente lo hago, pero estaba buscando algo más "profesional" – Eduardo

+0

Siempre podría redefinir la variable y esperar a que aparezca un error de compilación para indicarle dónde estaba la declaración anterior. Cualquier cosa más profesional probablemente sea "usar un IDE". – Michel

+0

Eso es un buen truco – Eduardo

5

Uso cscope y ctags-exuberante religiosamente. Ejecutarlo una vez en mi código base y luego en Vim, puedo usar varios comandos como ^] o [D o [I o similar para encontrar cualquier definición o declaración para una palabra dada.

Esto es similar a las instalaciones proporcionadas por mega-IDE como Visual Studio y Eclipse.

Cscope también funciona como una herramienta independiente que realiza estas búsquedas.

2

que utilice uno de tres métodos:

  1. CTags voy a utilizar para procesar mi árbol de fuentes (por noche) y luego se puede utilizar fácilmente los comandos de Vim (u otros editores) para saltar directamente a la definición.
  2. Usaré grep (linux) o findstr (windows) para buscar todas las apariciones del nombre o tipo de variable. La definición es bastante obvia.
  3. En Vim, puede buscar hacia atrás en el alcance y encontrar a menudo lo que está buscando.
1

En VIM puede utilizar gd para ver las declaraciones de variables locales o gD para ver las declaraciones de variables globales, si están definidos en el archivo actual. Referencia Go_to_definition_using_g

También puede utilizar [i para ver la definición sin saltar a ella, o [I para ver todas las apariciones de la variable en todos los archivos incluidos, así, que se mostrará de forma natural la definición también.

Cuestiones relacionadas