2010-09-27 23 views
18

Uso CEDET (último CVS) con varios proyectos moderadamente grandes (algunos cientos kLOC cada uno, en su mayoría C, pero algunos C++) y a veces experimentan largas pausas en las que el sistema no responde por segundos. Más raramente, se sale completamente de control y tengo que mezclarlo en C-g e intento mover el cursor o cambiar a un buffer diferente para recuperar el control.CEDET consejos de escalabilidad

Utilizo GNU Global para crear etiquetas para los proyectos con los que trabajo, pero esto a veces es lento, especialmente para semantic-symref-symbol, y algunos saltos que parecen requerir el análisis de muchos encabezados y archivos fuente. En algunos casos semantic-ia-fast-jump errores con el mensaje semantic-ia--fast-jump-helper: Tag SomeFunction has no buffer information aunque gtags-find-tag lo encuentre de inmediato (en el mismo proyecto), aunque tal vez en una ubicación desactualizada; esto puede ser un error temporal, generalmente semantic-ia-fast-jump es confiable.

Agradecería cualquier sugerencia sobre cómo

  • acelerador CEDET sin perder todo el análisis semántico.
  • Averigüe qué causó que CEDET se salga de control para poder corregir las definiciones de mis proyectos o presentar un informe de errores.
  • Determine por qué algunos análisis semánticos están fallando.
  • Obtener semántica para almacenar en caché más información para que sea más receptiva, tengo mucha memoria que me gustaría usar.
  • Administre GNU Global (cree y mantenga al día) para múltiples proyectos en diferentes lugares, incluidos los directorios del sistema.
  • Administrar dependencias entre proyectos que he configurado con ede-cpp-root-project.
  • Administrar proyectos que tienen varias configuraciones de compilación, cada una con su propio "config.h" y el directorio de compilación.

Hay algunos consejos en el artículo http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html, estoy buscando algo más allá de ese artículo.

Respuesta

20

Las herramientas CEDET que está utilizando están limitadas por la capacidad de Emacs de rastrear cada símbolo en todo su proyecto. Un buen punto de partida para limitar lo que hace CEDET/Semantic es a través del semanticdb-find-default-throttle. Si sabe cómo está organizado su proyecto, puede desactivar algunos tipos de búsquedas para acelerar las cosas.

CEDET analizará muchos archivos que cree que podría necesitar y que llenarán también la memoria. En ese caso, puede personalizar semantic-idle-scheduler-max-buffer-size para deshabilitar el análisis de archivos grandes, semantic-idle-work-parse-neighboring-files-flag para deshabilitar el análisis de elementos cercanos aleatorios y `semantic-idle-work-update-headers-flag 'para deshabilitar los encabezados de análisis. Tenga en cuenta que los últimos 2 valores predeterminados son nulos, pero están habilitados por algunas de las funciones de configuración automática.

CEDET/Semántica guardará en caché una gran cantidad de datos en memoria, y construye tablas de búsqueda ordenadas para aumentar el rendimiento. Si descubre que está editando archivos de encabezado mucho, esas ediciones hacen que las memorias caché se desactualicen y las obliguen a reconstruirse. Si sale y reinicia Emacs mucho, eso obliga a Semántica a volver a cargar tablas de bases de datos grandes.

Otra posibilidad es configurar semanticdb-persistent-path para enumerar solo los directorios que le interesan mucho. Esto reducirá los datos guardados, que no se volverán a cargar. Si es necesario, se volverá a analizar según sea necesario, pero ayudará a mantener bajos los datos totales.

También puede usar semantic--before-fetch-tags-hook a una función que devuelve nil bajo diversas condiciones.Busque archivos que tarden mucho en analizarse debido al tamaño, la latencia de la red o lo que sea, y configúrelos para que nunca se analicen. Eso también ahorrará tiempo.

Usar GNU Global es una buena manera de acelerar las cosas. Utilizándolo con symref semántico hará que los archivos en los que encuentra hits analicen para proporcionar los datos requeridos para la pantalla de salida. No hay mucho que hacer al respecto.

Para el error que encontraste arriba, si puedes identificar una manera de reproducirlo, por favor compártelo en la lista de correo cedet-devel para que pueda ser reparado. Ese tipo de error ha aparecido antes, generalmente cuando la etiqueta Global de GNU no puede convertirse en una etiqueta de almacenamiento intermedio.

Para depurar CEDET girando fuera de control, use semantic-debug-idle-function y semantic-debug-idle-work-function para acotar. Vea arriba sobre alguna configuración allí.

Puede usar cedet-gnu-global-create/update-database para actualizar una base de datos o agregarla a un enlace. No creo que haya llegado al doc.

La gestión de proyectos es complicada. La mayoría de los proyectos integrados son buenos para cosas pequeñas. Los proyectos particularmente grandes con sistemas de compilación personalizados generalmente garantizan un tipo de proyecto EDE personalizado. Crear nuevos proyectos no es tan malo. Si miras en ede-linux o ede-emacs, puedes ver lo básico. En su proyecto personalizado, puede resumir todos sus proyectos relacionados y anular funciones como macros, incluir directorios y compilar comandos. Tuve que escribir un proyecto personalizado para mi trabajo también. Era muy similar a ede-linux con cosas únicas en donde trabajo.