2012-11-04 16 views
10

Ho reinstallato emacs 24.2.50 su un nuovo host Linux e ho avviato una nuova configurazione dotEmacs basata sulla configurazione di emacs magnars. Dal momento che ho utilizzato CEDET con successo nel mio precedente flusso di lavoro, ho iniziato a configurarlo. Tuttavia, c'è qualche strano comportamento ogni volta che carico un file sorgente C++.Errore semantico sconosciuto

[Questa parte è risolto]
Come previsto, analizza semantiche tutti i file inclusi (e durante la configurazione iniziale analizza tutti i file specificati dal semantico-add-system-includono variabili), ma esso stampa questa un messaggio di errore che va come questo:

WARNING: semantic-find-file-noselect called for /usr/include/c++/4.7/vector while in set-auto-mode for /usr/include/c++/4.7/vector. You should call the responsible function into 'mode-local-init-hook'.

nell'esempio sopra l'errore viene stampato per il vettore STL, ma un messaggio di errore viene stampato per ogni file incluso da quello che sto visitando e ogni successiva comprende. Di conseguenza ci vuole molto tempo per finire e, sfortunatamente, il processo si ripete di qualsiasi tipo apro un nuovo buffer.

[Questo problema è risolto Troppo]
Inoltre sembra che l'analisi non funziona davvero, come quando ho posto il punto sopra un non-c tipo primitivo (cioè non int, double, float, ecc) invece di stampare la definizione del tipo in modeline un messaggio di errore come

Idle Service Error semantic-idle-local-symbol-highlight-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, (((0) \"IndexMap\"))" Idle Service Error semantic-idle-summary-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, ((\"fXBetween\" 0 nil nil))"

dove DEPFETResolutionAnalysis.cc è il buffer di file & attualmente sto modificando e IndexMap e fXTra i tipi sono definiti nei file inclusi dal file che sto modificando/alcuni file inclusi dal file che sto modificando.

Non ho ancora testato ulteriori funzionalità di CEDET/semantico poiché il problema è piuttosto fastidioso. La mia confet cedet può essere trovata here.

MODIFICA: Con l'aiuto di Alex Ott ho risolto il primo problema. Era dovuto alla mia orribile inizializzazione del cedet. Guarda la sua prima risposta per il modo corretto di configurare CEDET!
Rimane il problema con lo Idle Service Error (che, quando si attiva global-semantic-idle-local-symbol-highlight-mode, si verifica in modo permanente, non solo quando si verifica la definizione del tipo nel punto).
E c'è il nuovo problema di come disabilitare il file di avvio del sito (s).

EDIT2: ho eseguito semantic-debug-idle-function in un buffer in cui si verifica il problema e produce un ~ 700kb uscita [sic!]. Sembra che stia eseguendo alcune operazioni su un contenitore di dati che, a quanto sembra, contiene informazioni su tutti i simboli definiti nei file analizzati. Come ho analizzato un pacchetto piuttosto grande (~ 20Mb file sorgente) questa tabella è piuttosto grande. Può la semantica gestire un database così grande o impossibile e il motivo del mio problema?

EDIT3: Eliminare il contenuto di ~/.semanticdb e ripetere tutti gli include ha fatto il trucco.Devo ancora disabilitare i file init site-wise ma poiché questo non è collegato a CEDET, chiuderò questa domanda (la domanda relativa ai file init site-wise può essere trovata here).

+1

Si prega di fornire informazioni su quale versione di CEDET si sta utilizzando, ecc Si prega di tenere anche in account, che non è necessario mettere le linee 2-40 in hook. Questa attività (caricamento di CEDET) dovrebbe essere eseguita una sola volta, non all'apertura di ciascun file C/C++. Vedi https://gist.github.com/3930120 come esempio della configurazione di CEDET –

+1

Ci sono anche altri errori nel tuo init - quando stai usando 'c-mode-common-hook', allora sarà chiamato per C, C++, ecc., Quindi non è necessario impostarlo separatamente per le modalità C & C++. –

risposta

3

Il primo problema è stato risolto configurando correttamente CEDET che è descritto su Alex Ott's homepage. La sua risposta risolve questo primo problema. Il file di configurazione specificato nella sua risposta è un ottimo inizio per una bella configurazione; Ho usato lo stesso per configurare CEDET per i miei bisogni.

Il secondo problema è scomparso una volta che ho aggiornato CEDET dalla versione 1.1 a quella del bazar (repository), che viene spiegato here e nell'articolo di Alex. Addizionalmente si deve cancellare il contenuto della directory ~/.semanticdb (che contiene il database semantico ed è stato danneggiato credo).

vorrei ringraziare Alex Ott per il suo aiuto e attaccare con me durante il mio viaggio alla soluzione :)

6

È necessario modificare il file di init in modo che esegua il caricamento di CEDET una sola volta, non nel hook che verrà chiamato per ciascun file .h/.hpp/.c/.cpp. È possibile modificare this config come base e leggere ulteriori informazioni in following article.

Il problema che hai è causato perché semantico sta cercando di analizzare i file di intestazione, e quando tenta di aprirle, quindi le routine di inizializzazione sono chiamati ancora, e ancora ...

+0

Non esiste un file denominato "cedet-devel-load.el" nell'archivio cedet scaricato dalla home page di cedet. Quando si carica common/cedet.el (come per la semplice guida di installazione dalla homepage di cedet), questo errore si verifica durante il caricamento: 'errore: EIEIO Versione 1.3 già caricato; carica CEDET all'inizio del tuo file init per evitare questo. Ho identificato che eieio.elc esiste in /usr/share/emacs/24.2.50/lisp/emacs-lisp/ che è richiesto da ** auth-source.elc ** (che è parte di gnus). – elemakil

+0

Questo è abbastanza strano in quanto non ho usato gnus su questa macchina e di conseguenza non è configurato ... inoltre, non capisco perché gnus/auth-source richiederebbe eieio che (per quanto ho capito) è usato per Diagrammi UML e cose simili. – elemakil

+0

se si utilizza CEDET esterno, quindi è necessario caricarlo prima, prima del built-in. È anche meglio prendere una nuova istantanea di bzr e configurarla come descritto nell'articolo –

Problemi correlati