Domanda

Sto cercando di implementare alcune funzionalità aggiuntive al processo di stampa di LibreOffice (alcune informazioni speciali dovrebbero essere aggiunte automaticamente ai margini di ogni pagina stampata).Utilizzo RHEL 6.4 con LibreOffice 4.0.4 e Gnome 2.28.

Il mio scopo è ricercare il flusso di dati tra LibreOffice e i componenti di sistema e determinare quali codici sorgente sono responsabili della stampa.Dopodiché dovrò modificare queste parti di codice.

Ora avrei bisogno di un consiglio sulle modalità di ricerca del codice sorgente.Ho trovato molti strumenti e dal mio punto di vista:

  1. strace sembrano essere di livello molto basso;
  2. gprof richiede binari ricompilati con "-pg" CFLAGS;non ho idea di come farlo con LibreOffice;
  3. systemtap può sondare solo le chiamate di sistema, vero?
  4. callgrind + Gprof2Dot stanno abbastanza bene insieme ma danno risultati strani (vedi sotto);

Ad esempio, ecco il grafico delle chiamate di callgrind uscita con Gprof2Dot visualizzazione.Ho iniziato callgrind con un comando del genere:

valgrind --tool=callgrind --dump-instr=yes --simulate-cache=yes --collect-jumps=yes /usr/lib64/libreoffice/program/soffice --writer

e ho ricevuto quattro file di output:

-rw-------.   1 root  root          0 Jan  9 21:04 callgrind.out.29808
-rw-------.   1 root  root     427196 Jan  9 21:04 callgrind.out.29809
-rw-------.   1 root  root     482134 Jan  9 21:04 callgrind.out.29811
-rw-------.   1 root  root     521713 Jan  9 21:04 callgrind.out.29812

L'ultimo (pid 29812) corrisponde all'applicazione GUI di LibreOffice Writer in esecuzione (l'ho determinato con strace E ps aux).ho insistito CTRL+P e il pulsante OK.Quindi ho chiuso l'applicazione sperando di vedere nei log la funzione responsabile dell'inizializzazione del processo di stampa.

IL callgrind l'output è stato elaborato con a Gprof2Dot strumento secondo questa risposta.Purtroppo sull'immagine non riesco a vedere né le azioni che mi interessano, né il grafico delle chiamate così com'è.

Apprezzerò qualsiasi informazione sul modo corretto di risolvere un problema del genere.Grazie.

enter image description here

È stato utile?

Soluzione

Il modo corretto di risolvere questo problema è ricordare che LibreOffice è open source.L'intero codice sorgente è documentato e puoi sfogliare la documentazione su docs.libreoffice.org .Non farlo il modo più duro :)

Inoltre, ricorda che la finestra di dialogo Impostazione della stampante non è specifica di LibreOffice, piuttosto, è fornita dal sistema operativo.

Altri suggerimenti

Quello che vuoi è uno strumento per identificare il codice sorgente di interesse.Gli strumenti Test Coverage (TC) possono fornire queste informazioni.

Ciò che fanno gli strumenti TC è determinare quali frammenti di codice sono stati eseguiti, quando il programma viene esercitato;pensalo come una raccolta come un insieme di regioni di codice.Normalmente gli strumenti TC vengono utilizzati insieme ai test (interattivi/unità/integrazione/sistema), per determinare l'efficacia dei test.Se è stata eseguita solo una piccola quantità di codice (come rilevato dallo strumento TC), i test vengono interpretati come inefficaci o incompleti;se è stata coperta un'ampia percentuale, si dispone di buoni test e di una ragionevole giustificazione per la spedizione del prodotto (supponendo che tutti i test siano stati superati).

Ma puoi utilizzare gli strumenti TC per trovare il codice che implementa le funzionalità.Innanzitutto, esegui alcuni test (o magari gestisci manualmente il software) per esercitare la funzionalità di interesse e raccogliere i dati TC.Questo ti dice l'insieme di tutti i codici esercitati, se la funzionalità viene utilizzata;è una sopravvalutazione del codice che ti interessa.Quindi eserciti il ​​programma, chiedendogli di svolgere un'attività simile, ma che non esercita la funzionalità.Questo identifica l'insieme di codice che sicuramente non implementa la funzionalità.Calcola la differenza impostata del codice esercitato con funzionalità e... senza per determinare il codice più focalizzato sul supporto della funzionalità.

Puoi naturalmente ottenere limiti più stretti eseguendo più funzionalità di esercizi e più funzionalità di non esercizio e calcolando le differenze sulle unioni di tali insiemi.

Esistono strumenti TC per C++, ad esempio "gcov".La maggior parte di loro, penso, non ti permetterà/ti aiuterà a calcolare tali differenze rispetto ai risultati;molti strumenti TC sembrano non avere alcun supporto per la manipolazione dei set coperti.(La mia azienda crea una famiglia di strumenti TC che hanno questa funzionalità, comprese le differenze di set di copertura di calcolo, incluso C++).

Se davvero lo vuoi estratto il codice pertinente, gli strumenti TC non lo fanno.Ti dicono semplicemente quale codice designando le regioni di testo nei file sorgente.La maggior parte degli strumenti di copertura dei test riportano solo la copertura linee come tali regioni di testo;ciò è in parte dovuto al fatto che il meccanismo utilizzato da molti strumenti di copertura dei test è limitato ai numeri di riga registrati dal compilatore.

Tuttavia, è possibile disporre di strumenti di copertura del test che siano precisi nel segnalare le regioni di testo in termini di file/riga/colonna iniziale fino al file/riga/colonna finale (ehm, gli strumenti della mia azienda lo fanno).Con queste informazioni, è abbastanza semplice creare un semplice programma per leggere i file sorgente ed estrarre letteralmente il codice che è stato eseguito.(Ciò non significa che il codice estratto sia un programma ben formato!ad esempio, le dichiarazioni dei dati non verranno incluse nei frammenti eseguiti sebbene siano necessarie).

OP non dice cosa intende fare con tale codice, quindi l'insieme di frammenti potrebbe essere tutto ciò che serve.Se vuole estrarre il codice e le dichiarazioni necessarie, avrà bisogno di strumenti più sofisticati in grado di determinare le dichiarazioni necessarie.Strumenti di trasformazione del programma con parser completi e risolutori di nomi per il codice sorgente possono fornire le funzionalità necessarie a questo scopo.Questo è notevolmente più complicato da utilizzare rispetto ai semplici strumenti di copertura dei test con estrazione del testo ad hoc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top