<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://techbase.kde.org/skins/common/feed.css?0.2"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Panda84&amp;feedformat=atom</id>
		<title>KDE TechBase - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://techbase.kde.org/api.php?action=feedcontributions&amp;user=Panda84&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Special:Contributions/Panda84"/>
		<updated>2013-05-26T04:58:18Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-06T08:28:39Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Per la maggior parte dei casi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte dei casi. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''cosa che causa la creazione di backtrace inutili''' come questo:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la distribuzione in uso ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando il backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui ci sono le istruzioni che spiegano come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti contenenti i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sanno dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-05T10:39:21Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: moved User:Panda84/Development/Tutorials/Debugging/How to create useful crash reports (it) to Development/Tutorials/Debugging/How to create useful crash reports (it):&amp;amp;#32;Page is now completely translated. La pagina è ora completamente tradotta.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''cosa che causa la creazione di backtrace inutili''' come questo:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la distribuzione in uso ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando il backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui ci sono le istruzioni che spiegano come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti contenenti i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sanno dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>User:Panda84/Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-05T10:39:21Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: moved User:Panda84/Development/Tutorials/Debugging/How to create useful crash reports (it) to Development/Tutorials/Debugging/How to create useful crash reports (it):&amp;amp;#32;Page is now completely translated. La pagina è ora completamente tradotta.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Development/Tutorials/Debugging/How to create useful crash reports (it)]]&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-05T10:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Fix sezione GDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''cosa che causa la creazione di backtrace inutili''' come questo:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la distribuzione in uso ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando il backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui ci sono le istruzioni che spiegano come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti contenenti i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sanno dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-05T10:29:13Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Fix nella sezione pacchetti per le distribuzioni.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''cosa che causa la creazione di backtrace inutili''' come questo:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la distribuzione in uso ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando il backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui ci sono le istruzioni che spiegano come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti contenenti i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sa dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni è bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-05T10:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Fix grassetto e un errore battitura.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''cosa che causa la creazione di backtrace inutili''' come questo:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la distribuzione in uso ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando il backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti di contenente i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sa dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni è bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-02T15:33:27Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Corretto errore ortografia.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di installare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la tua distribuzione ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando al backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti di contenente i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sa dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni è bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-02T15:25:02Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Sezione &amp;quot;valgrind&amp;quot; tradotta.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di intallare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la tua distribuzione ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando al backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti di contenente i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sa dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni è bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con Valgrind===&lt;br /&gt;
&lt;br /&gt;
Un altro strumento utile per creare backtrace di crash è [http://www.valgrind.org Valgrind]; esso non sostituisce GDB, ma piuttosto lo completa.&lt;br /&gt;
&lt;br /&gt;
Quando si esegue un'applicazione in valgrind ogni pezzo di memoria letta o scritta dall'applicazione stessa viene controllato. Valgrind riporterà operazioni non valide in memoria nello standard output o in un file di log. Dato che la maggior parte dei crash sono dovuti a letture invalide in memoria, Valgrind può essere utile per tracciare dove succedono i problemi.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consiste di vari tool per verificare o effettuare la profilazione di un'applicazione. In questo articolo useremo solo memcheck, il tool di default che viene chiamato all'esecuzione di valgrind.}}&lt;br /&gt;
&lt;br /&gt;
Come GDB, Valgrind rende l'esecuzione delle applicazioni molto più lento e più esoso in termini di risorse.&lt;br /&gt;
&lt;br /&gt;
Per avviare l'applicazione all'interno di valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Ora va riprodotto il crash. Appena avviene sia l'applicazione che valgrind termineranno. Ciò che rimane è un file con nome &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; dove ''pid'' sarà il process ID del processo valgrind. Il file potrebbe elencare più errori di quanti siano effettivamente causa del crash. Qui c'è un esempio della parte che causa il crash che corrisponde al backtrace GDB sopra:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
Per essere sicuro allega alla segnalazione del bug l'intero file log fornito da valgrind.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-02T14:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Sezioni &amp;quot;crash&amp;quot; e &amp;quot;gdb&amp;quot; tradotte.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di intallare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la tua distribuzione ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando al backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti di contenente i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Ora che sono state reperite le informazioni per rendere utile la traccia dell'esecuzione va riprodotto il crash nell'applicazione. La finestra di dialogo di KDE apparirà qualche istante dopo al crash dell'applicazione.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|La finestra di dialogo dei crash di KDE]]&lt;br /&gt;
&lt;br /&gt;
Ora la generazione del backtrace dovrebbe risultare molto più completa, ad esempio:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
Molto meglio, vero? In questo backtrace sono presenti gli indirizzi di memoria, i file sorgenti, i numeri di riga e i parametri passati alle funzioni che hanno causato il problema. Ciò rende più facile per gli sviluppatori capire la causa del problema, in quanto sa dove guardare.&lt;br /&gt;
&lt;br /&gt;
{{note|È '''obbligatorio''' avere GDB installato per ottenere il backtrace di un crash. Nella sezione seguente è spiegato cos'è GDB e come installarlo.}}&lt;br /&gt;
&lt;br /&gt;
===Ottenere un backtrace con GDB===&lt;br /&gt;
&lt;br /&gt;
In alcuni casi non è possibile creare un backtrace con la finestra di dialogo dei crash di KDE. Ciò può essere dovuto da un'applicazione entrata in un loop infinito, o dal fatto che la finestra del crash non è apparsa per qualche motivo. In tali casi è possibile ottenere un backtrace con &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, il [http://sourceware.org/gdb/ Debugger GNU]. GDB è disponibile pacchettizzato per tutte le distribuzioni più importanti.&lt;br /&gt;
&lt;br /&gt;
Il richiamo di GDB dipende dalle situazioni. È possibile sia eseguire un'applicazione all'interno di gdb che collegare gdb ad un processo già in esecuzione. Quest'ultima situazione in particolare è utile quando un'applicazione è già entrata in un loop infinito. Cominciamo con la prima soluzione; per eseguire un'applicazione da gdb digitare sulla riga di comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
Apparirà il prompt di GDB. Per avviare l'applicazione, al momento non ancora avviata, è necessario invocare il comando&amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
{{note|Alcune applicazioni di KDE (ad esempio JuK e KTorrent) contengono del codice speciale per assicurarsi che ci sia una sola istanza dell'applicazione avviata alla volta. Per queste applicazioni è bisogna utilizzare il comando &amp;quot;run --nofork&amp;quot; al prompt di (gdb) invece di &amp;quot;run&amp;quot; perché altrimenti gdb proverebbe a debuggare il processo sbagliato. In caso di dubbio su quale usare è sufficiente provare ad avviare l'applicazione con l'opzione --nofork: se l'applicazione dice che è un'opzione sconosciuta è possibile rimuovere l'opzione --nofork.}}&lt;br /&gt;
&lt;br /&gt;
Questo avvierà l'applicazione a cui siete abituati, e vi permetterà di lavorarci come fate solitamente (con la differenza che consumerà molta più memoria e potrebbe risultare molto più lenta). Ora va riprodotto il crash. Quando l'applicazione va in crash essa si chiuderà riportando al prompt di GDB. Ora è necessario invocare il comando 'backtrace':&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
Ciò dovrebbe fornire una buona backtrace che può essere inserita nel Bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
In caso si voglia collegarsi ad un processo già esistente va invocato il seguente comando:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
dove ''pid'' è il process ID del processo al quale ci si vuole collegare. Una volta collegati, quando il processo è in un ciclo infinito, dopo aver usato il comando 'backtrace' apparirà una traccia dell'esecuzione. È possibile utilizzare il comando 'continue' per lasciare l'applicazione eseguire nuovamente e premere Ctrl+C in gdb per poter inserire nuovamente dei comandi.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-06-02T13:28:26Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Completata la sezione &amp;quot;Preparare i pacchetti&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di intallare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la tua distribuzione ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando al backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - La famiglia di distribuzioni Ubuntu rende le cose abbastanza facili. Ogni modulo ufficiale di KDE ha un pacchetto aggiuntivo nei repository con il suffisso &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. È importante installare sempre  &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, in quanto tutte le applicazioni KDE usano kdelibs (kdelibs-dbg per applicazioni KDE 3). Oltre a ciò è necessario installare il pacchetto -dbg anche per l'applicazione che è andata in crash. Per esempio se si è piantato KOrganizer è necessario installare anche &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt;. Se il programma non fa parte di un modulo ufficiale di KDE e non ha un apposito pacchetto -dbg, è possibile installare il pacchetto -dbgsym dal repository in questa [https://wiki.kubuntu.org/DebuggingProgramCrash pagina sul debugging dei programmi].  &lt;br /&gt;
** Durante il ciclo di sviluppo di Ubuntu il gestore di crash Apport è attivo e si preoccuperà di riportare i crash a launchpad.net e creare il backtrace per te. Se si desidera utilizzare il gestore dei crash di KDE è possibile disabilitarlo nel file /etc/defaults/apport&lt;br /&gt;
** A partire da Lucid Lynx (10.04) Kubuntu inoltrerà tutti i bug che non sono peculiari della distribuzione al sistema di gestione di KDE; Apport è ora disabilitato in modo da utilizzare DrKonqui come gestore predefinito dei crash.&lt;br /&gt;
*'''openSUSE''' - È necessario solo installare i pacchetti &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt;, ad esempio: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. È possibile trovare questi pacchetti nei [http://en.opensuse.org/KDE/Repositories repository KDE]. C'è anche una [http://en.opensuse.org/Bugs:An_application_crashed pagina dedicata al debugging in openSUSE].&lt;br /&gt;
*'''Fedora''' - In Fedora è sufficiente utilizzare i seguenti comandi:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; per trovare quale pacchetto fornisce quel file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; da utente root per installare i pacchetti di debug per quel pacchetto (dipendenze incluse).&lt;br /&gt;
*: Una guida completa e dettagliata per Fedora è disponibile in [http://fedoraproject.org/wiki/StackTraces questo documento] che descrive come procedere. Fedora utilizza un repository debuginfo separato che va abilitato. Si consiglia anche di utilizzare il plugin yum &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; per tenere aggiornati i pacchetti debuginfo.&lt;br /&gt;
&lt;br /&gt;
Nel raro caso in cui la distribuzione non abbia pacchetti di contenente i simboli di debug per KDE, è necessario compilare KDE dai sorgenti:&lt;br /&gt;
&lt;br /&gt;
* Nel caso di KDE 3, al passo di configure, è necessario passare il parametro &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; al fine di creare i simboli di debug nei file risultanti.&lt;br /&gt;
* Nel caso di KDE 4, al passo di cmake, è necessario passare il parametro &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. Se si vuole passare opzioni personalizzate a CXXFLAGS, utilizzare &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  È possibile cambiare le opzioni CMAKE_CXX_FLAGS in base alle proprie necessità.&lt;br /&gt;
&lt;br /&gt;
Dopodiché è sufficiente dare &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; come al solito.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports"/>
				<updated>2010-05-15T15:37:35Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Better clarity in Ubuntu section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document describes how to reproduce a useful backtrace of crashing KDE applications. First, some general information is given. Then, we will describe for several distributions how to prepare your KDE packages and gaining the backtrace. This should be enough for most people.&lt;br /&gt;
There are additional sections on how to create backtraces with the GNU Debugger and with Valgrind, which are in some cases useful.&lt;br /&gt;
&lt;br /&gt;
==How to create useful crash reports==&lt;br /&gt;
&lt;br /&gt;
A good crash report at [http://bugs.kde.org Bugzilla] consists of two parts: a '''description''' of how to reproduce the crash and a '''backtrace''' of the crash. With one of those elements missing, it is much harder (if not impossible) for developers to tackle the problem.&lt;br /&gt;
&lt;br /&gt;
A description should consist of more than only &amp;amp;quot;it crashed&amp;amp;quot;. Try to describe everything you did prior to the crash. Did you click on a button, opened a particular website or file which caused problems? That little detail which may look useless to you may be useful for the developer, so just write it down.&lt;br /&gt;
&lt;br /&gt;
A more insightful article on how to write good bug descriptions is available [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html at this link], please read that before reporting bugs.&lt;br /&gt;
&lt;br /&gt;
Don't attach the backtrace to the bug report. Instead, simply paste it. This way it is much easier for developers to search for duplicate reports, because attachments will not be searched.&lt;br /&gt;
&lt;br /&gt;
If you paste a backtrace to a report, make sure you strip all but one or two of the &lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
lines from the backtrace as they make it harder to read.&lt;br /&gt;
&lt;br /&gt;
Even though pasting backtraces directly is preferred over adding an attachment, please do not paste other things like logs (valgrind, strace or terminal output) or example data (mails, HTML files and so on). Use attachments for these items.&lt;br /&gt;
&lt;br /&gt;
===Backtraces===&lt;br /&gt;
&lt;br /&gt;
Backtraces are essential. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: [[Development/Tutorials/Debugging/Debugging_symbols|libraries and executables occupy much more disk space than their optimized counter parts]]. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''':&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
**During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
**Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - In Fedora you just need to do:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; to find out which package provides that file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; as root to install debug packages for that package (dependencies included).&lt;br /&gt;
*:A complete and detailed guide for Fedora is available in [http://fedoraproject.org/wiki/StackTraces this document] describing how to proceed. Fedora uses a separate debuginfo repository that has to be enabled. Also consider &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; yum plugin to keep debuginfo packages up to date.&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-05-01T16:27:35Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Prima parte di &amp;quot;Creare i pacchetti KDE&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di intallare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
=== Preparare i pacchetti KDE ===&lt;br /&gt;
&lt;br /&gt;
Se la tua distribuzione ha pacchetti predisposti per il debugging è necessario installarli.&lt;br /&gt;
&lt;br /&gt;
È facile vedere quali pacchetti di debug manchino guardando al backtrace. Prendiamo in considerazione la seguente linea di una backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
Il simbolo &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indica che la libreria &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; è priva di informazioni di debug, che potrebbero essere disponibili in pacchetti di debug separati. In questo caso, è facile capire che è necessario installare i pacchetti di debug per KMail per ottenere un backtrace migliore.&lt;br /&gt;
&lt;br /&gt;
Alcune volte, c'è bisogno di installare più di un pacchetto di debug per ottenere un buon backtrace. Ciò dipende da come le distribuzioni suddividono i pacchetti. Per esempio, per alcune distribuzioni è sufficiente installare il pacchetto per &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; per avere sufficienti informazioni riguardo un crash in KMail, in altre distribuzioni c'è un pacchetto di debug aggiuntivo per KMail.&lt;br /&gt;
&lt;br /&gt;
Qui c'è una lista di come ottenere i pacchetti di debug per alcune distribuzioni:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offre pacchetti &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; per creare facilmente backtrace utili. Basta installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. ad esempio &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; per i crash di KMail. Le dipendenze di -dbg assicurano di ottenere anche gli altri pacchetti necessari (kdelibs-dbg, gdb, e così via).&lt;br /&gt;
*'''FreeBSD ports''' - Fare riferimento alla pagina [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo delle FAQ di KDE su FreeBSD].&lt;br /&gt;
*'''Gentoo''' - Gentoo ha [http://www.gentoo.org/proj/en/qa/backtraces.xml una guida] che descrive come procedere.&lt;br /&gt;
*'''Mandriva''' - A partire da Mandriva 2007.0 in su ci sono pacchetti addizionali per tutto KDE. È sufficiente installare il corrispondente pacchetto &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt;, come &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; e &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. Quasi certamente va installato &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; in ogni caso.&lt;br /&gt;
** Nota: i pacchetti &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; sono in repository separati. Ad esempio, per tutti i pacchetti in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, si possono trovare i pacchetti di debug nel  repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
*:During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
*:Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - Fedora has its [http://fedoraproject.org/wiki/StackTraces own document] describing how to proceed. (A debuginfo repository has to be enabled.)&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports"/>
				<updated>2010-05-01T16:21:55Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Fix Fedora paragraph.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document describes how to reproduce a useful backtrace of crashing KDE applications. First, some general information is given. Then, we will describe for several distributions how to prepare your KDE packages and gaining the backtrace. This should be enough for most people.&lt;br /&gt;
There are additional sections on how to create backtraces with the GNU Debugger and with Valgrind, which are in some cases useful.&lt;br /&gt;
&lt;br /&gt;
==How to create useful crash reports==&lt;br /&gt;
&lt;br /&gt;
A good crash report at [http://bugs.kde.org Bugzilla] consists of two parts: a '''description''' of how to reproduce the crash and a '''backtrace''' of the crash. With one of those elements missing, it is much harder (if not impossible) for developers to tackle the problem.&lt;br /&gt;
&lt;br /&gt;
A description should consist of more than only &amp;amp;quot;it crashed&amp;amp;quot;. Try to describe everything you did prior to the crash. Did you click on a button, opened a particular website or file which caused problems? That little detail which may look useless to you may be useful for the developer, so just write it down.&lt;br /&gt;
&lt;br /&gt;
A more insightful article on how to write good bug descriptions is available [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html at this link], please read that before reporting bugs.&lt;br /&gt;
&lt;br /&gt;
Don't attach the backtrace to the bug report. Instead, simply paste it. This way it is much easier for developers to search for duplicate reports, because attachments will not be searched.&lt;br /&gt;
&lt;br /&gt;
If you paste a backtrace to a report, make sure you strip all but one or two of the &lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
lines from the backtrace as they make it harder to read.&lt;br /&gt;
&lt;br /&gt;
Even though pasting backtraces directly is preferred over adding an attachment, please do not paste other things like logs (valgrind, strace or terminal output) or example data (mails, HTML files and so on). Use attachments for these items.&lt;br /&gt;
&lt;br /&gt;
===Backtraces===&lt;br /&gt;
&lt;br /&gt;
Backtraces are essential. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: [[Development/Tutorials/Debugging/Debugging_symbols|libraries and executables occupy much more disk space than their optimized counter parts]]. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''':&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
*:During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
*:Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - In Fedora you just need to do:&lt;br /&gt;
*# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; to find out which package provides that file;&lt;br /&gt;
*# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; as root to install debug packages for that package (dependencies included).&lt;br /&gt;
*:A complete and detailed guide for Fedora is available in [http://fedoraproject.org/wiki/StackTraces this document] describing how to proceed. Fedora uses a separate debuginfo repository that has to be enabled. Also consider &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; yum plugin to keep debuginfo packages up to date.&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports"/>
				<updated>2010-05-01T16:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Minor fixes to Fedora section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document describes how to reproduce a useful backtrace of crashing KDE applications. First, some general information is given. Then, we will describe for several distributions how to prepare your KDE packages and gaining the backtrace. This should be enough for most people.&lt;br /&gt;
There are additional sections on how to create backtraces with the GNU Debugger and with Valgrind, which are in some cases useful.&lt;br /&gt;
&lt;br /&gt;
==How to create useful crash reports==&lt;br /&gt;
&lt;br /&gt;
A good crash report at [http://bugs.kde.org Bugzilla] consists of two parts: a '''description''' of how to reproduce the crash and a '''backtrace''' of the crash. With one of those elements missing, it is much harder (if not impossible) for developers to tackle the problem.&lt;br /&gt;
&lt;br /&gt;
A description should consist of more than only &amp;amp;quot;it crashed&amp;amp;quot;. Try to describe everything you did prior to the crash. Did you click on a button, opened a particular website or file which caused problems? That little detail which may look useless to you may be useful for the developer, so just write it down.&lt;br /&gt;
&lt;br /&gt;
A more insightful article on how to write good bug descriptions is available [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html at this link], please read that before reporting bugs.&lt;br /&gt;
&lt;br /&gt;
Don't attach the backtrace to the bug report. Instead, simply paste it. This way it is much easier for developers to search for duplicate reports, because attachments will not be searched.&lt;br /&gt;
&lt;br /&gt;
If you paste a backtrace to a report, make sure you strip all but one or two of the &lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
lines from the backtrace as they make it harder to read.&lt;br /&gt;
&lt;br /&gt;
Even though pasting backtraces directly is preferred over adding an attachment, please do not paste other things like logs (valgrind, strace or terminal output) or example data (mails, HTML files and so on). Use attachments for these items.&lt;br /&gt;
&lt;br /&gt;
===Backtraces===&lt;br /&gt;
&lt;br /&gt;
Backtraces are essential. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: [[Development/Tutorials/Debugging/Debugging_symbols|libraries and executables occupy much more disk space than their optimized counter parts]]. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''':&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
*:During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
*:Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - In Fedora you just need to do:&lt;br /&gt;
# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; to find out which package provides that file;&lt;br /&gt;
# &amp;lt;tt&amp;gt;debuginfo-install kdepim&amp;lt;/tt&amp;gt; as root to install debug packages for that package (dependencies included).&lt;br /&gt;
A complete and detailed guide for Fedora is available in [http://fedoraproject.org/wiki/StackTraces this document] describing how to proceed. Fedora uses a separate debuginfo repository that has to be enabled. Also consider &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; yum plugin to keep debuginfo packages up to date.&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports"/>
				<updated>2010-05-01T16:02:47Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Updated Fedora instructions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}}&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document describes how to reproduce a useful backtrace of crashing KDE applications. First, some general information is given. Then, we will describe for several distributions how to prepare your KDE packages and gaining the backtrace. This should be enough for most people.&lt;br /&gt;
There are additional sections on how to create backtraces with the GNU Debugger and with Valgrind, which are in some cases useful.&lt;br /&gt;
&lt;br /&gt;
==How to create useful crash reports==&lt;br /&gt;
&lt;br /&gt;
A good crash report at [http://bugs.kde.org Bugzilla] consists of two parts: a '''description''' of how to reproduce the crash and a '''backtrace''' of the crash. With one of those elements missing, it is much harder (if not impossible) for developers to tackle the problem.&lt;br /&gt;
&lt;br /&gt;
A description should consist of more than only &amp;amp;quot;it crashed&amp;amp;quot;. Try to describe everything you did prior to the crash. Did you click on a button, opened a particular website or file which caused problems? That little detail which may look useless to you may be useful for the developer, so just write it down.&lt;br /&gt;
&lt;br /&gt;
A more insightful article on how to write good bug descriptions is available [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html at this link], please read that before reporting bugs.&lt;br /&gt;
&lt;br /&gt;
Don't attach the backtrace to the bug report. Instead, simply paste it. This way it is much easier for developers to search for duplicate reports, because attachments will not be searched.&lt;br /&gt;
&lt;br /&gt;
If you paste a backtrace to a report, make sure you strip all but one or two of the &lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
lines from the backtrace as they make it harder to read.&lt;br /&gt;
&lt;br /&gt;
Even though pasting backtraces directly is preferred over adding an attachment, please do not paste other things like logs (valgrind, strace or terminal output) or example data (mails, HTML files and so on). Use attachments for these items.&lt;br /&gt;
&lt;br /&gt;
===Backtraces===&lt;br /&gt;
&lt;br /&gt;
Backtraces are essential. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: [[Development/Tutorials/Debugging/Debugging_symbols|libraries and executables occupy much more disk space than their optimized counter parts]]. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''':&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
*:During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
*:Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - In Fedora you just need to do:&lt;br /&gt;
# &amp;lt;tt&amp;gt;yum provides &amp;quot;/usr/lib/libkmailprivate.so.4&amp;quot;&amp;lt;/tt&amp;gt; to find out which package provides that file;&lt;br /&gt;
# &amp;lt;tt&amp;gt;debuginfo-install package-name&amp;lt;/tt&amp;gt; to install debug packages for that package (dependencies include.&lt;br /&gt;
A complete and detailed guide for Fedora is available in [http://fedoraproject.org/wiki/StackTraces this document] describing how to proceed. Fedora uses a separate debuginfo repository that has to be enabled. Also consider &amp;lt;tt&amp;gt;auto-update-debug-info&amp;lt;/tt&amp;gt; yum plugin to keep debuginfo packages up to date.&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-05-01T15:32:27Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Sezione backtrace tradotta.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. Possono sembrare senza significato per i non addetti, ma in realtà possono contenere una gran quantità di informazioni utili. Un backtrace descrive quali funzioni sono state chiamate prima del crash, in modo che gli sviluppatori possano tracciare in quale metodo è partito il problema. Ottenere buoni backtrace ha uno svantaggio: [[Development/Tutorials/Debugging/Debugging_symbols|le librerie e gli eseguibili occupano molto più spazio rispetto alla versione ottimizzata]]. È per questo motivo che molte distribuzioni scelgono di intallare file senza simboli di debugging, '''che causa la creazione di backtrace inutili&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
Per fortuna non c'è da preoccuparsi, con alcune modifiche è possibile creare backtrace con tutte le informazioni necessarie per le applicazioni KDE.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
&amp;lt;!--*'''Fedora''' ???--&amp;gt;&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.  &lt;br /&gt;
*:During the Ubuntu development cycle the Apport crash handler is turned on which will report crashes to launchpad.net and do the backtrace for you, if you would rather use the KDE crash handler turn Apport off in /etc/defaults/apport&lt;br /&gt;
*:Starting with Lucid Lynx (10.04) Kubuntu will be forwarding all non kubuntu specific bugs upstream and had disabled Apport so that DrKonqui will be th edefault crash handler.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - Fedora has its [http://fedoraproject.org/wiki/StackTraces own document] describing how to proceed. (A debuginfo repository has to be enabled.)&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde-crash-handler.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2010-05-01T14:47:50Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Prova di salvataggio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}} &lt;br /&gt;
&lt;br /&gt;
== Introduzione ==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente. Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi. &lt;br /&gt;
&lt;br /&gt;
== Come creare segnalazioni di crash utili ==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema. &lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;quot;si è piantato&amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione. &lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni. &lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati. &lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo: &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere. &lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati. &lt;br /&gt;
&lt;br /&gt;
=== Backtrace ===&lt;br /&gt;
&lt;br /&gt;
I backtrace sono essenziali. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: libraries and executables occupy much more disk space than their optimized counter parts. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''': &lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in&amp;amp;nbsp;?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in&amp;amp;nbsp;?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in&amp;amp;nbsp;?? ()&lt;br /&gt;
 #4  0x082149c0 in&amp;amp;nbsp;?? ()&lt;br /&gt;
 #5  0x00003ffc in&amp;amp;nbsp;?? ()&lt;br /&gt;
 #6  0x00000000 in&amp;amp;nbsp;?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications. &lt;br /&gt;
&lt;br /&gt;
=== Preparing your KDE packages ===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them. &lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace: &lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in&amp;amp;nbsp;?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace. &lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail. &lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions: &lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on). &amp;lt;!--*'''Fedora''' ???--&amp;gt; &lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ]. &lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed. &lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways. &lt;br /&gt;
**Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well. If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page. &lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page]. &lt;br /&gt;
*'''Fedora''' - Fedora has its [http://fedoraproject.org/wiki/StackTraces own document] describing how to proceed. (A debuginfo repository has to be enabled.)&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources: &lt;br /&gt;
&lt;br /&gt;
*If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files. &lt;br /&gt;
*If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;. If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;. You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to. &lt;br /&gt;
&lt;br /&gt;
=== Crash! ===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab. &lt;br /&gt;
&lt;br /&gt;
[[Image:Kde crash dialog1.png|center|300px|KDE Crash Dialog]] &lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example: &lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;amp;lt;TreeMapItem&amp;amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem. &lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}} &lt;br /&gt;
&lt;br /&gt;
=== Retrieving a backtrace with GDB ===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages. &lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run: &lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command: &lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command: &lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}} &lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla. &lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell: &lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands. &lt;br /&gt;
&lt;br /&gt;
=== Retrieving a backtrace with Valgrind ===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement. &lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs. &lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}} &lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources. &lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind: &lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above: &lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;amp;lt;TreeMapItem&amp;amp;gt;::operator==(QPtrList&amp;amp;lt;TreeMapItem&amp;amp;gt; const&amp;amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-04T09:53:42Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Separate le domande.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda a Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Sono dovuto andare a rileggere quella pagina per ricordarmi cosa c'era scritto! XD Tutto attuale, niente da aggiungere. :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Se parliamo di cinema, The Matrix è in cima alla lista. Se parliamo di telefilm, ho un vero culto per Stargate. 15 stagioni riviste almeno 2 volte  :)  Mi sto anche appassionando all'ultimo remake di Battlestar Galactica, fatto molto bene secondo me.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;A 5 anni, come tutti i bimbi, ho deciso di voler fare l'astronauta, così col tempo mi sono appassionato alla tecnologia. A 8 anni mi hanno regalato il primo computer, e a 12 anni sul libro 'Windows 95 for dummies', ho trovato un capitolo sul Visual Basic 4: il mio primo approccio alla programmazione. Poi è venuta la fase 'Evviva il multiboot!'. Avevo trovato la mia prima distro su un numero di Linux&amp;amp;Co. La filosofia opensource mi è piaciuta subito perché mi metteva a disposizione una serie incredibile di strumenti per saziare la mia sete di conoscenza. La distribuzione in questione era Red Hat 7.3, la prima ad includere l'allora neonato KDE 3.0. Era presentato da un articolo chilometrico in quel numero della rivista, che ha contribuito alla mia iniziale scelta sul desktop, aiutato anche da gnome 1.4 che non era proprio uno splendore :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti voi due? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Avevo parlato con Davide Bettio del mio desiderio di partecipare al gsoc. Avevo già un'idea, che tutt'ora ritengo interessante, ma che non convinceva le alte sfere e aveva poche possibilità. Quando Davide ha saputo del progetto riguardo policykit, me ne ha parlato e mi ha messo in contatto con Dario.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/namespaceKAuth.html documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Serve ad aiutare gli sviluppatori nella gestione delle proprie credenziali d'utente. Gli utenti finali beneficeranno di una maggiore coerenza nell'interfaccia del sistema, una maggiore integrazione tra applicazioni anche di desktop differenti, e una maggiore sicurezza. Gli admin avranno molta più flessibilità nelle scelte. Tutto questo potrà essere supportato dagli sviluppatori con pochissime righe di codice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC hai scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;KDE On Mac è un progetto veramente molto ambizioso e lungi dal venire completato. Il problema principale è che gli utenti Mac si aspettano un look&amp;amp;feel molto differente rispetto alle altre piattaforme, che va oltre la semplice 'natività' fornita da Qt. Per rendere Kate, ad esempio, un editor appetibile ad un utente mac medio, le modifiche da fare all'interfaccia sarebbero tante e tali (e non portabili) che ho il dubbio che mai nessuno le farà... Quando si sviluppa con il mac in mente invece, gli strumenti forniti da Apple (Objective-C e Cocoa) permettono di aderire a queste 'regole' senza muovere un dito. Quindi chi mantiene il progetto dovrebbe porsi una domanda: si vuole fare in modo che gli utenti kde si trovino a casa quando usano un mac, o si vuole attirare utenti mac verso le applicazioni di kde? Nel primo caso, funziona già tutto. Nel secondo caso, purtroppo, si è ancora lontani.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi? E se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Non la uso, e penso che Dario lo sappia. :P Non ho una distro fissa in questo periodo. :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Buon compleanno a chi fa gli anni :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-04T09:51:36Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Aggiunte le risposte di Nicola.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda a Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Sono dovuto andare a rileggere quella pagina per ricordarmi cosa c'era scritto! XD Tutto attuale, niente da aggiungere. :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Se parliamo di cinema, The Matrix è in cima alla lista. Se parliamo di telefilm, ho un vero culto per Stargate. 15 stagioni riviste almeno 2 volte  :)  Mi sto anche appassionando all'ultimo remake di Battlestar Galactica, fatto molto bene secondo me.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;A 5 anni, come tutti i bimbi, ho deciso di voler fare l'astronauta, così col tempo mi sono appassionato alla tecnologia. A 8 anni mi hanno regalato il primo computer, e a 12 anni sul libro 'Windows 95 for dummies', ho trovato un capitolo sul Visual Basic 4: il mio primo approccio alla programmazione. Poi è venuta la fase 'Evviva il multiboot!'. Avevo trovato la mia prima distro su un numero di Linux&amp;amp;Co. La filosofia opensource mi è piaciuta subito perché mi metteva a disposizione una serie incredibile di strumenti per saziare la mia sete di conoscenza. La distribuzione in questione era Red Hat 7.3, la prima ad includere l'allora neonato KDE 3.0. Era presentato da un articolo chilometrico in quel numero della rivista, che ha contribuito alla mia iniziale scelta sul desktop, aiutato anche da gnome 1.4 che non era proprio uno splendore :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti voi due? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Avevo parlato con Davide Bettio del mio desiderio di partecipare al gsoc. Avevo già un'idea, che tutt'ora ritengo interessante, ma che non convinceva le alte sfere e aveva poche possibilità. Quando Davide ha saputo del progetto riguardo policykit, me ne ha parlato e mi ha messo in contatto con Dario.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/namespaceKAuth.html documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Serve ad aiutare gli sviluppatori nella gestione delle proprie credenziali d'utente. Gli utenti finali beneficeranno di una maggiore coerenza nell'interfaccia del sistema, una maggiore integrazione tra applicazioni anche di desktop differenti, e una maggiore sicurezza. Gli admin avranno molta più flessibilità nelle scelte. Tutto questo potrà essere supportato dagli sviluppatori con pochissime righe di codice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC hai scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;KDE On Mac è un progetto veramente molto ambizioso e lungi dal venire completato. Il problema principale è che gli utenti Mac si aspettano un look&amp;amp;feel molto differente rispetto alle altre piattaforme, che va oltre la semplice 'natività' fornita da Qt. Per rendere Kate, ad esempio, un editor appetibile ad un utente mac medio, le modifiche da fare all'interfaccia sarebbero tante e tali (e non portabili) che ho il dubbio che mai nessuno le farà... Quando si sviluppa con il mac in mente invece, gli strumenti forniti da Apple (Objective-C e Cocoa) permettono di aderire a queste 'regole' senza muovere un dito. Quindi chi mantiene il progetto dovrebbe porsi una domanda: si vuole fare in modo che gli utenti kde si trovino a casa quando usano un mac, o si vuole attirare utenti mac verso le applicazioni di kde? Nel primo caso, funziona già tutto. Nel secondo caso, purtroppo, si è ancora lontani.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi? E se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Non la uso, e penso che Dario lo sappia. :P Non ho una distro fissa in questo periodo. :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;42&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;Buon compleanno a chi fa gli anni :)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T10:51:10Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Altra piccola correzione.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda a Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti voi due? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/namespaceKAuth.html documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC hai scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi, e se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T10:47:33Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Piccole correzioni.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda a Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti voi due? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/namespaceKAuth.html documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC ha scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi, e se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T10:41:31Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Aggiunto il link ad api.kde.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda per Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/namespaceKAuth.html documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC ha scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi, e se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T09:54:18Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Finite le domande.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda per Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [ documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC ha scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi, e se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ultima domanda semplice semplice: quanto legno roderebbe un roditore se un roditore potesse rodere il legno?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ciao e ancora grazie mille, se volete «lasciare un messaggio» potete farlo!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T09:50:16Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Quasi finito con le domande.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda per Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [ documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, mi puoi dire qualche parola anche sull'[http://lists.kde.org/?l=kde-core-devel&amp;amp;m=125081035605469&amp;amp;w=2 integrazione con KIO] (la libreria di copia dei file di KDE) [https://bugs.kde.org/show_bug.cgi?id=179289#c11 di cui ti sei preso carico]? A che punto è? KDE 4.4 è troppo vicino per vedere già qualcosa di funzionante?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Nicola, dal tuo blog si capisce che ti piace lavorare con il Mac e che durante il tuo GSoC ha scritto il supporto per la libreria sia per Linux che per Mac (il supporto per Windows è ancora in cerca di un volontario). Come ti sei trovato a sviluppare per KDE sotto Mac? A che punto ritieni che sia il progetto [http://mac.kde.org/ KDE on Mac]?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, ho visto che è appena uscita [http://chakra-project.org/news/index.php?/archives/17-Chakra-Alpha3-Test-released.html Chakra alpha 3], la distribuzione con cui collabori: vuoi fare un po' di puro e sano marketing? Nicola, tu la usi, e se no, l'hai mai confessato a Dario? :-D&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T09:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Domande a metà.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda per Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Come vi siete conosciuti? È stato in occasione del [http://socghop.appspot.com/student_project/show/google/gsoc2009/kde/t124022559993 Google Summer of Code 2009] o avete avuto contatti anche in precedenza?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Dario, se non sbaglio [http://lists.kde.org/?l=kde-windows&amp;amp;m=123774212425414&amp;amp;w=2 l'idea di una libreria per l'esecuzione di azioni privilegiate] è venuta a te mentre lavoravi su PolicyKit-KDE, dico bene? Puoi raccontarci com'è nata l'idea e come si è evoluta fino ad essere approvata per il GSoC 2009?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;So che già avete scritto tanto riguardo all'[http://www.gigabytes.it/2009/07/kde-authorization-library-first-step/ Authorization] [http://www.gigabytes.it/2009/07/kde-authorization-library-second-step/ Framework] [http://www.gigabytes.it/2009/08/kde-authorization-library-final-step/ per KDE], che è già stato [http://drfav.wordpress.com/2009/08/31/tokamak-kauth-into-kdelibs/ importato in kdelibs], sia sui vostri [http://drfav.wordpress.com/2009/09/15/kauth-in-use-privileged-kcmodules/ blog] che nella [ documentazione tecnica] quindi non vi tedio ulteriormente. Vi chiedo solo di spiegare rapidamente, pensando agli utenti alle prime armi del nostro sito, a cosa serve dal loro punto di vista, e perché è importante.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
''Dario'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario</id>
		<title>User:Panda84/Intervista Nicola Dario</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Intervista_Nicola_Dario"/>
				<updated>2009-10-03T09:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Prime domande a Nicola&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Diego'': &amp;quot;Ciao Nicola, ciao Dario! Vi ringrazio per averci concesso questa intervista doppia. Comincio con il fare qualche domanda per Nicola, visto che [http://www.kde-it.org/news.php?extend.285 con Dario ho già avuto modo di scambiare qualche parola]. Ho letto un po' di te [http://www.gigabytes.it/chi-sono/ sul tuo blog], vuoi aggiungere qualcosa o fare qualche aggiornamento?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ho letto che ti piacciono i film di fantascienza, quali sono i tuoi preferiti?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Diego'': &amp;quot;Ora c'è la domanda d'obbligo (noi intervistatori amiamo essere noiosi): come mai ti sei appassionato al software e non, chessò, al collezionismo? E come sei arrivato a Linux e soprattutto a KDE? Era già nella prima distribuzione che hai provato o ti ci sei avvicinato successivamente?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''Nicola'': &amp;quot;...&amp;quot;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2009-10-03T08:51:04Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Aggiunta intervista a Nicola e Dario&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* 18/07/2008 - [[Help:Wiki_Translation_(it)|Help : Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
* 15/08/2008 - [[Help:Contents_(it)|Help : Contents]]&lt;br /&gt;
* 16/08/2008 - [[Help:Contribute_(it)|Help : Contribute]]&lt;br /&gt;
* 28/09/2008 - [[Help:Wiki_Structure_(it)|Help : Wiki Structure]]&lt;br /&gt;
&lt;br /&gt;
== WORK IN PROGRESS ==&lt;br /&gt;
&lt;br /&gt;
* 23/03/2009 - [[User:Panda84/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)|Debugging : How to create useful crash report]]&lt;br /&gt;
* 03/10/2009 - [[User:Panda84/Intervista_Nicola_Dario | Intervista a Nicola Gigante e Dario Freddi]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)</id>
		<title>Development/Tutorials/Debugging/How to create useful crash reports (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)"/>
				<updated>2009-03-23T21:15:23Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Tradotti primi paragrafi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials/Debugging/How to create useful crash reports}}&lt;br /&gt;
==Introduzione==&lt;br /&gt;
&lt;br /&gt;
Questo documento descrive come riprodurre un backtrace (ovvero una &amp;quot;traccia dell'esecuzione&amp;quot;) di applicazioni KDE che vanno in crash. Inizialmente vengono fornite alcune informazioni generali; nel seguito vengono descritte le procedure per ottenere i pacchetti KDE per varie distribuzioni utili a ottenere i backtrace. Queste parti dovrebbero essere sufficienti per la maggior parte della gente.&lt;br /&gt;
Ci sono alcune sezioni addizionali su come creare backtrace con il GNU Debugger e con Valgrind, che possono essere utili in alcuni casi.&lt;br /&gt;
&lt;br /&gt;
==Come creare segnalazioni di crash utili==&lt;br /&gt;
&lt;br /&gt;
Una buona segnalazione di bug nel [http://bugs.kde.org Bugzilla] consiste di due parti: una '''descrizione''' di come riprodurre il crash ed un '''backtrace''' del crash stesso. Se manca uno di questi elementi risulta molto più difficile, se non impossibile, per gli sviluppatori affrontare il problema.&lt;br /&gt;
&lt;br /&gt;
Una descrizione deve consistere di qualcosa più di un solo &amp;amp;quot;si è piantato&amp;amp;quot;. È necessario cercare di descrivere qualsiasi cosa venga fatta prima del crash. È stato cliccato su un pulsante, aperto un particolare sito o file che ha causato il problema? Quel piccolo dettaglio che potrebbe sembrare inutile all'utente potrebbe risultare utile allo sviluppatore, quindi è sempre il caso di annotarlo nella segnalazione.&lt;br /&gt;
&lt;br /&gt;
Un articolo approfondito su come scrivere delle buone descrizioni di bug e segnalazioni è disponibile a [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html questo indirizzo], è caldamente consigliato leggerlo prima di effettuare delle segnalazioni.&lt;br /&gt;
&lt;br /&gt;
Il backtrace di un crash non va allegato alla segnalazione; va semplicemente incollato in coda al testo della segnalazione stessa. In questo modo è molto più semplice per gli sviluppatori individuare segnalazioni duplicate dello stesso bug, in quanto la ricerca non avviene anche sul testo degli allegati.&lt;br /&gt;
&lt;br /&gt;
Se si incolla un backtrace in una segnalazione assicurarsi di rimuovere tutte le righe, eccetto un paio, del tipo:&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
dal backtrace, in quanto lo rendono più difficile da leggere.&lt;br /&gt;
&lt;br /&gt;
Sebbene incollare backtrace direttamente sia preferibile rispetto ad aggiungere un allegato, non vanno incollate altre cose come log (valgrind, strace o output del terminale) o esempi di dati (email, file HTML e così via); per queste cose vanno usati gli allegati.&lt;br /&gt;
&lt;br /&gt;
===Backtraces===&lt;br /&gt;
&lt;br /&gt;
Backtraces are essential. They may look meaningless to you, but they might actually contain a wealth of useful information. A backtrace describes which functions were called prior to the crash, so that developers may track down in which function the mess started. Having good backtraces has a downside: libraries and executables occupy much more disk space than their optimized counter parts. That's the reason why many distros choose to install stripped files, '''which results in useless backtraces''':&lt;br /&gt;
&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/tls/i686/cmov/libthread_db.so.1&amp;quot;.&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 [Thread debugging using libthread_db enabled]&lt;br /&gt;
 [New Thread -1233848624 (LWP 12212)]&lt;br /&gt;
 [New Thread -1255081072 (LWP 12820)]&lt;br /&gt;
 [New Thread -1240921200 (LWP 12819)]&lt;br /&gt;
 [New Thread -1266680944 (LWP 12818)]&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 (no debugging symbols found)&lt;br /&gt;
 0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #0  0xffffe410 in __kernel_vsyscall ()&lt;br /&gt;
 #1  0xb6a1210b in ?? () from /lib/tls/i686/cmov/libpthread.so.0&lt;br /&gt;
 #2  0xb6a85afe in ?? () from /usr/lib/libX11.so.6&lt;br /&gt;
 #3  0x00000003 in ?? ()&lt;br /&gt;
 #4  0x082149c0 in ?? ()&lt;br /&gt;
 #5  0x00003ffc in ?? ()&lt;br /&gt;
 #6  0x00000000 in ?? ()&lt;br /&gt;
&lt;br /&gt;
But no worries, with some modifications you can create full blown backtraces for KDE applications.&lt;br /&gt;
&lt;br /&gt;
===Preparing your KDE packages===&lt;br /&gt;
&lt;br /&gt;
If your distribution has debugging-enabled packages, install them.&lt;br /&gt;
&lt;br /&gt;
It is easy to see which debug packages you are missing from looking at the backtrace. For example, take the following line from a backtrace:&lt;br /&gt;
&lt;br /&gt;
 #6  0xb7975bdc in ?? () from /usr/lib/libkmailprivate.so.4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt; indicates that the library &amp;lt;tt&amp;gt;libkmailprivate.so.4&amp;lt;/tt&amp;gt; does not have debug information, which might be available in separate debug packages. In this case, it is pretty easy to guess that you need to install debug packages for KMail to get a better backtrace.&lt;br /&gt;
&lt;br /&gt;
Sometimes, you need to install more than one debug package to get a good backtrace. This depends on how the distribution splits up the packages. For example, for some distributions it is enough to install the debug package for &amp;lt;tt&amp;gt;kdepim&amp;lt;/tt&amp;gt; to get enough debugging information for a crash in KMail, for other distributions there is an additional debug package just for KMail.&lt;br /&gt;
&lt;br /&gt;
Here's a list of how to obtain debug packages for some distributions:&lt;br /&gt;
&lt;br /&gt;
*'''Debian''' - Debian offers &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; packages to easy create useful backtraces. Just install the corresponding &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt; package. e.g. &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; for KMail crashes. The dependencies of -dbg makes sure to pull in the other right packages (kdelibs-dbg, gdb, and so on).&lt;br /&gt;
&amp;lt;!--*'''Fedora''' ???--&amp;gt;&lt;br /&gt;
*'''FreeBSD ports''' - Please refer to the [http://freebsd.kde.org/faq.php#AKDEapplicationcrashedandIwanttofileabugreportathttpbugskdeorgbutthebacktraceintheKDECrashManagerisuselessWhatcanIdo KDE on FreeBSD FAQ].&lt;br /&gt;
*'''Gentoo''' - Gentoo has its [http://www.gentoo.org/proj/en/qa/backtraces.xml own document] describing how to proceed.&lt;br /&gt;
*'''Mandriva''' - Mandriva 2007.0 and up has additional debugging packages for all of KDE (in fact, for all of its packages). Just install the corresponding &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; package, like &amp;lt;tt&amp;gt;kdebase-debug&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;kdemultimedia-debug&amp;lt;/tt&amp;gt;. You probably want to install &amp;lt;tt&amp;gt;kdelibs-debug&amp;lt;/tt&amp;gt; anyways.&lt;br /&gt;
** Note: the &amp;lt;tt&amp;gt;-debug&amp;lt;/tt&amp;gt; packages are in separate repositories. For instance, for all packages in &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, you'll find the debugging package in repository &amp;lt;tt&amp;gt;debug_main&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*'''Kubuntu/Ubuntu''' - The Ubuntu family makes things quite easy. Every official KDE module has an additional package in the repository, suffixed with &amp;lt;tt&amp;gt;-dbg&amp;lt;/tt&amp;gt;. Always install &amp;lt;tt&amp;gt;kdelibs5-dbg&amp;lt;/tt&amp;gt;, because all KDE applications use kdelibs (kdelibs-dbg for KDE 3 applications). Then you should install a -dbg package for the application which crashed. For example if KOrganizer crashed you should install &amp;lt;tt&amp;gt;kdepim-dbg&amp;lt;/tt&amp;gt; as well.  If the program is not from an official KDE module and has no -dbg package, you can install the -dbgsym package from the repository listed on this [https://wiki.kubuntu.org/DebuggingProgramCrash Debugging Program Crashes] page.&lt;br /&gt;
*'''openSUSE''' - You should only install the &amp;lt;tt&amp;gt;-debuginfo&amp;lt;/tt&amp;gt; packages, for example: &amp;lt;tt&amp;gt;kdepimlibs4-debuginfo&amp;lt;/tt&amp;gt;. You can find these packages in [http://en.opensuse.org/KDE/Repositories KDE repositories]. There is also a dedicated [http://en.opensuse.org/Bugs:An_application_crashed openSUSE debugging page].&lt;br /&gt;
*'''Fedora''' - Fedora has its [http://fedoraproject.org/wiki/StackTraces own document] describing how to proceed. (A debuginfo repository has to be enabled.)&lt;br /&gt;
&lt;br /&gt;
If your distribution doesn't have debugging-enabled packages for KDE, you'll have to compile KDE from sources:&lt;br /&gt;
&lt;br /&gt;
* If you're using KDE 3, then at the configure stage, you should supply the parameter &amp;lt;tt&amp;gt;--enable-debug=full&amp;lt;/tt&amp;gt; in order to build debug symbols in the resulting files.&lt;br /&gt;
* If you're using KDE 4, then at the cmake stage, you should supply the parameter &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=debugfull&amp;lt;/tt&amp;gt;.  If you want to specify your own CXXFLAGS, then use &amp;lt;tt&amp;gt;-DCMAKE_BUILD_TYPE=None CMAKE_CXX_FLAGS=&amp;quot;-O0 -g&amp;quot;&amp;lt;/tt&amp;gt;.  You can change the CMAKE_CXX_FLAGS as appropriate for your needs.&lt;br /&gt;
&lt;br /&gt;
Then it's just &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; as you're used to.&lt;br /&gt;
&lt;br /&gt;
===Crash!===&lt;br /&gt;
&lt;br /&gt;
Now it's time to crash your application. The KDE Crash Dialog should appear right after the crash, which shows the Backtrace tab.&lt;br /&gt;
&lt;br /&gt;
[[Image:Kde crash dialog1.png|center|300px|KDE Crash Dialog]]&lt;br /&gt;
&lt;br /&gt;
Click that tab and wait for a minute. This process may take quite some memory, so things may go sluggish all of a sudden. But the result should look much better. For example:&lt;br /&gt;
&lt;br /&gt;
 Using host libthread_db library &amp;quot;/lib/libthread_db.so.1&amp;quot;. &lt;br /&gt;
 [Thread debugging using libthread_db enabled] &lt;br /&gt;
 [New Thread -1232783168 (LWP 7604)] &lt;br /&gt;
 [KCrash handler] &lt;br /&gt;
 #6  0x0806be76 in TreeMapItem::parent (this=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.h:285 &lt;br /&gt;
 #7  0x08065fea in TreeMapItemList::compareItems (this=0xbfec04a8, item1=0x0, &lt;br /&gt;
     item2=0x0) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:720 &lt;br /&gt;
 #8  0xb7281619 in QGList::operator== () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #9  0x0806d498 in QPtrList&amp;lt;TreeMapItem&amp;gt;::operator== (this=0xbfec04a8, &lt;br /&gt;
     list=@0xbfec0468) at /usr/qt/3/include/qptrlist.h:74 &lt;br /&gt;
 #10 0x08062e18 in TreeMapWidget::mousePressEvent (this=0xbfec03ac, &lt;br /&gt;
     e=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/treemap.cpp:1840 &lt;br /&gt;
 #11 0xb7004a63 in QWidget::event () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #12 0xb6f6bca7 in QApplication::internalNotify () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #13 0xb6f6ca88 in QApplication::notify () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #14 0xb7725a84 in KApplication::notify (this=0xbfec055c, receiver=0xbfec03ac, &lt;br /&gt;
     event=0xbfebff1c) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdelibs/kdecore/kapplication.cpp:550 &lt;br /&gt;
 #15 0xb6f0bfd2 in QETWidget::translateMouseEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #16 0xb6f0b8b0 in QApplication::x11ProcessEvent () &lt;br /&gt;
    from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #17 0xb6f1b761 in QEventLoop::processEvents () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #18 0xb6f82831 in QEventLoop::enterLoop () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #19 0xb6f826b6 in QEventLoop::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #20 0xb6f6b72f in QApplication::exec () from /usr/qt/3/lib/libqt-mt.so.3 &lt;br /&gt;
 #21 0x0805181e in main (argc=134673960, argv=0xffffffff) &lt;br /&gt;
     at /home/bram/KDE/kde3/kdeaddons/konq-plugins/fsview/main.cpp:55&lt;br /&gt;
&lt;br /&gt;
This looks better, right? It shows memory addresses, the source files and line numbers and the parameters passed to functions. Which make it more helpful to the developer where to look for the problem.&lt;br /&gt;
&lt;br /&gt;
{{note|You '''need''' GDB installed to get the backtrace of a crash. Please read the next section to know what GDB is, and how to install it.}}&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with GDB===&lt;br /&gt;
&lt;br /&gt;
In some cases, it is not possible to create a backtrace with the KDE Crash Dialog. This may be caused by an application which entered an infinite loop, or the crash dialog did not appear at all for some reason. You can try to grab a backtrace with &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;, the [http://sourceware.org/gdb/ GNU Debugger]. GDB is widely available through distribution packages.&lt;br /&gt;
&lt;br /&gt;
Invoking GDB differs from the situation. You can run an application from inside gdb, or attach gdb to an already running process. The latter may be useful when an application already has entered an infinite loop. But we will first start with running an application inside gdb. From the shell, run:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp&lt;br /&gt;
&lt;br /&gt;
The GDB prompt will appear. Note that this does not start the application itself, you should run it by invoking the &amp;lt;tt&amp;gt;run&amp;lt;/tt&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 (gdb) run&lt;br /&gt;
&lt;br /&gt;
This will run the application like you are used to, and you can work with it like normal (it only consumes far more memory and may feel sluggish). Now it's time to reproduce your crash. When you succeed, the application just closes and you should return to your GDB prompt. Now it's time to run the 'backtrace' command:&lt;br /&gt;
&lt;br /&gt;
{{note|Some KDE applications (such as JuK and KTorrent) have special code to ensure that there is only one running instance of the application at a time.  For these applications you should type in &amp;quot;run --nofork&amp;quot; at the (gdb) prompt instead of &amp;quot;run&amp;quot; because otherwise gdb will try to debug the wrong process.  If you are unsure as to whether to use --nofork just try it.  If the application says it's an unknown option you can remove --nofork.}}&lt;br /&gt;
&lt;br /&gt;
 (gdb) thread apply all backtrace&lt;br /&gt;
&lt;br /&gt;
This should give a good backtrace which can be posted at the KDE Bugzilla.&lt;br /&gt;
&lt;br /&gt;
In case you want to attach to an existing process, run the following command in the shell:&lt;br /&gt;
&lt;br /&gt;
 $ gdb someKDEapp pid&lt;br /&gt;
&lt;br /&gt;
where ''pid'' is the process ID of the process you want to attach to. Once attached, and the process is in an infinite loop, after using the 'backtrace' command again a useful backtrace will appear. You can use 'continue' command to let the application run again and press Ctrl+C in gdb to be able to again enter commands.&lt;br /&gt;
&lt;br /&gt;
===Retrieving a backtrace with Valgrind===&lt;br /&gt;
&lt;br /&gt;
When it comes to crashes, [http://www.valgrind.org Valgrind] is also a useful tool to create a backtrace. It's not a substitution for GDB, but rather a supplement.&lt;br /&gt;
&lt;br /&gt;
When you run an application in valgrind, every piece of memory read or written by the application is being checked. Valgrind will report erroneous memory operations in the standard output or in a log file. Since most crashes are due to an invalid memory read, valgrind can be useful to track down where the problem occurs.&lt;br /&gt;
&lt;br /&gt;
{{note|Valgrind consists of several tools in order to check or profile an application. For this article, we only use memcheck, the default tool when valgrind is being invoked.}}&lt;br /&gt;
&lt;br /&gt;
Like GDB, Valgrind makes running an application much slower, while consuming a lot more resources.&lt;br /&gt;
&lt;br /&gt;
Start the application within valgrind:&lt;br /&gt;
&lt;br /&gt;
 $ valgrind --log-file=someKDEapp someKDEapp&lt;br /&gt;
&lt;br /&gt;
Now reproduce the crash. As soon as this happens, the application and valgrind will terminate. What's left is a file named &amp;lt;tt&amp;gt;someKDEapp.pid&amp;lt;/tt&amp;gt; where ''pid'' is replaced by the process ID of the valgrind process. The file may list more errors than the one causing the crash. Here's the bit causing the crash which corresponds to the GDB backtrace above:&lt;br /&gt;
&lt;br /&gt;
 ==23292== Invalid read of size 4&lt;br /&gt;
 ==23292==    at 0x806BD9E: TreeMapItem::parent() const (treemap.h:285)&lt;br /&gt;
 ==23292==    by 0x8065FB9: TreeMapItemList::compareItems(void*, void*) (treemap.cpp:720)&lt;br /&gt;
 ==23292==    by 0x50AC618: QGList::operator==(QGList const&amp;amp;) const (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x806D3BF: QPtrList&amp;lt;TreeMapItem&amp;gt;::operator==(QPtrList&amp;lt;TreeMapItem&amp;gt; const&amp;amp;) const (qptrlist.h:74)&lt;br /&gt;
 ==23292==    by 0x8062DE7: TreeMapWidget::mousePressEvent(QMouseEvent*) (treemap.cpp:1840)&lt;br /&gt;
 ==23292==    by 0x4E2FA62: QWidget::event(QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D96CA6: QApplication::internalNotify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D97A87: QApplication::notify(QObject*, QEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4809AC3: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:550)&lt;br /&gt;
 ==23292==    by 0x4D36FD1: QETWidget::translateMouseEvent(_XEvent const*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D368AF: QApplication::x11ProcessEvent(_XEvent*) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==    by 0x4D46760: QEventLoop::processEvents(unsigned) (in /usr/qt/3/lib/libqt-mt.so.3.3.8)&lt;br /&gt;
 ==23292==  Address 0x2C is not stack'd, malloc'd or (recently) free'd&lt;br /&gt;
&lt;br /&gt;
But to be sure, just attach the whole log file to the crash report.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2009-03-23T20:26:18Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Wiki structure moved and Useful crash report created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* 18/07/2008 - [[Help:Wiki_Translation_(it)|Help : Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
* 15/08/2008 - [[Help:Contents_(it)|Help : Contents]]&lt;br /&gt;
* 16/08/2008 - [[Help:Contribute_(it)|Help : Contribute]]&lt;br /&gt;
* 28/09/2008 - [[Help:Wiki_Structure_(it)|Help : Wiki Structure]]&lt;br /&gt;
&lt;br /&gt;
== WORK IN PROGRESS ==&lt;br /&gt;
&lt;br /&gt;
* 23/03/2009 - [[User:Panda84/Development/Tutorials/Debugging/How_to_create_useful_crash_reports_(it)|Debugging : How to create useful crash report]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Wiki_Structure_(it)</id>
		<title>Help:Wiki Structure (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Wiki_Structure_(it)"/>
				<updated>2009-03-23T20:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: User:Panda84/Help:Wiki Structure (it) moved to Help:Wiki Structure (it): Looks like the page is ok. I should have moved it long time ago...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Wiki Structure}}&lt;br /&gt;
&lt;br /&gt;
Questa pagina illustra i metodi utilizzati per mantenere il wiki degli sviluppatori KDE.&lt;br /&gt;
&lt;br /&gt;
== Pagine radice ==&lt;br /&gt;
Le pagine più importanti in questo wiki sono le pagine radice (in ordine alfabetico):&lt;br /&gt;
&lt;br /&gt;
;[[Contribute]]&lt;br /&gt;
;[[Development]]&lt;br /&gt;
:[[Development/Architecture]]&lt;br /&gt;
:[[Development/FAQs]]&lt;br /&gt;
:[[Development/Further Information]]&lt;br /&gt;
:[[Development/Guidelines]]&lt;br /&gt;
:[[Development/Languages]]&lt;br /&gt;
:[[Development/Tools]]&lt;br /&gt;
:[[Development/Tutorials]]&lt;br /&gt;
;[[Getting Started]]&lt;br /&gt;
;[[ISV]]&lt;br /&gt;
;[[Policies]]&lt;br /&gt;
;[[Projects]]&lt;br /&gt;
;[[Schedules]]&lt;br /&gt;
;[[KDE System Administration]]&lt;br /&gt;
&lt;br /&gt;
Tutte le altre pagine o articoli appartengono ad una di queste pagine (o ad una delle loro sottopagine), ciò significa che facciamo ampio uso di sottopagine per mantenere la struttura e la gerarchia per non perdere la visuale d'insieme.&lt;br /&gt;
&lt;br /&gt;
=== Sottopagine ===&lt;br /&gt;
Una sottopagina è una relazione genitore-figlio. Nel seguente esempio '''Development''' è il ''genitore'' di '''Tutorials''', o, per dirla nel modo opposto la pagina '''Tutorials''' è una sottopagina (o un figlio) di '''Development'''.&lt;br /&gt;
&lt;br /&gt;
 [[Development/Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Usare sottopagine ha svariati vantaggi:&lt;br /&gt;
* forniscono in modo automatico una '''gerarchia''' implicita nell'URL stesso&lt;br /&gt;
* i '''link all'indietro''' generati automaticamente forniscono una facile navigazione&lt;br /&gt;
&lt;br /&gt;
Ad esempio, dai uno sguardo alla pagina&lt;br /&gt;
 [[Development/Architecture/KDE3/Library Structure]]&lt;br /&gt;
puoi notare i seguenti link all'inizio della pagina:&lt;br /&gt;
 &amp;lt; [[Development]] | [[Development/Architecture|Architecture]] | [[Development/Architecture/KDE3|KDE3]]&lt;br /&gt;
&lt;br /&gt;
== Categorie ==&lt;br /&gt;
&lt;br /&gt;
In breve, una [http://meta.wikimedia.org/wiki/Help:Category categoria] è un '''tag''' che appare alla fine di un articolo. In quanto tali, le categorie forniscono un'indicizzazione automatica che è utile come indice dei contenuti. Assieme ai link e ai template aiutano molto a strutturare un progetto.&lt;br /&gt;
&lt;br /&gt;
* [[Special:Categories|Lista di categorie]]&lt;br /&gt;
* [[Special:Unusedcategories|Lista di categorie non utilizzate]] - Sentiti libero di usarle&lt;br /&gt;
&lt;br /&gt;
Assicurati di leggere la pagina della categoria (ad esempio [[:Category:Documentation]]) prima di aggiungerla come tag in modo da usarla in modo corretto.&lt;br /&gt;
&lt;br /&gt;
== Pagine speciali importanti ==&lt;br /&gt;
Ci sono varie pagine speciali che aiutano a mantenere pulito il wiki:&lt;br /&gt;
&lt;br /&gt;
; Problemi che andrebbero sistemati prima possibile&lt;br /&gt;
:[[Special:Lonelypages]]&lt;br /&gt;
:[[Special:BrokenRedirects]]&lt;br /&gt;
:[[Special:DoubleRedirects]]&lt;br /&gt;
&lt;br /&gt;
; Problemi che andrebbero risolti nel tempo&lt;br /&gt;
:[[Special:Wantedpages]]&lt;br /&gt;
:[[Special:Wantedcategories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84/Help:Wiki_Structure_(it)</id>
		<title>User:Panda84/Help:Wiki Structure (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84/Help:Wiki_Structure_(it)"/>
				<updated>2009-03-23T20:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: User:Panda84/Help:Wiki Structure (it) moved to Help:Wiki Structure (it): Looks like the page is ok. I should have moved it long time ago...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Help:Wiki Structure (it)]]&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User_talk:Dhaumann</id>
		<title>User talk:Dhaumann</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User_talk:Dhaumann"/>
				<updated>2008-10-06T15:59:03Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Added a question about Wiki_Structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Its fine to delete the kdesvn-build page. I will merge my content into the existing page. Also, I will also modify the link from the Getting Started page to point to the existing kdesvn-build page.&lt;br /&gt;
[[User:Kunalthakar|Kunalthakar]] 19:51, 7 November 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Thanks ==&lt;br /&gt;
Thanks for the information.. If I got more questions, can I ask you then?&lt;br /&gt;
: Of course -- [[User:Dhaumann|Dhaumann]]&lt;br /&gt;
&lt;br /&gt;
== Movinh Content ==&lt;br /&gt;
Hi, Thanks for movinh Qualig?ty team to a another place.. I did ngot know where to  place it.. I'm going to move more from quality.kde.org, should I move it to the same folder or what?&lt;br /&gt;
&lt;br /&gt;
== Title Translation ==&lt;br /&gt;
&lt;br /&gt;
Hi guy !!!&lt;br /&gt;
I would like to know if menu bar translation is possible... If true, how could I do this?&lt;br /&gt;
Thank you...&lt;br /&gt;
&lt;br /&gt;
:You can use the template &amp;lt;nowiki&amp;gt;{{DISPLAYTITLE:foo}}&amp;lt;/nowiki&amp;gt;, where 'foo' is the translation. However, the display title reflects the wiki link, that's why a text &amp;quot;link to this page as &amp;lt;nowiki&amp;gt;[[...]]&amp;lt;/nowiki&amp;gt;&amp;quot; will appear then. --[[User:Dhaumann|Dhaumann]] 15:40, 18 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::Actually not, I have hidden that text with display:none for on-screen printing. One bug though: When using DISPLAYTITLE, the &amp;lt;title&amp;gt; tag is not filled for some reason... --[[User:Danimo|Danimo]] 16:33, 18 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::Damn... If you need help with this, you can ask me as you want for help... ;) --[[User:Fatalerrors|Fatalerrors]] 10:52, 20 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hi, Dhaumann, can you read and write Chinese? Cool! --[[User:Liangqi|Liangqi]] 23:00, 18 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Unfortunately no. I can't read nor write it. But I still try my best to fix links in a language where I mostly see squares :-) --[[User:Dhaumann|Dhaumann]] 23:22, 18 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: I see, I had found it in the diff. Thanks. I had mentioned this link problem in our mailing list. --[[User:Liangqi|Liangqi]] 11:36, 20 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Thanks ==&lt;br /&gt;
&lt;br /&gt;
Hi, Dhaumann, thanks for links fixes.&lt;br /&gt;
I had fixed the link you were talking about.&lt;br /&gt;
Thanks a lot.&lt;br /&gt;
--[[User:Powerfox|Powerfox]] 19:15, 31 July 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Trank you ==&lt;br /&gt;
&lt;br /&gt;
Thank you a lot for fixing the links of galician tech base ;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Getting_Started/Build/KDE4_(bn_IN) ==&lt;br /&gt;
Thank you for explaining me. I misunderstood the previous message of yours. Thanks again for pointing me to the right direction :)&lt;br /&gt;
&lt;br /&gt;
== Sorting in feature list ==&lt;br /&gt;
&lt;br /&gt;
Why did you manually move (to sort) the stuff in the feature list?&lt;br /&gt;
It totally breaks the history... :(&lt;br /&gt;
&lt;br /&gt;
IMHO it should had been some kind of automatic sorting... or this sadly proves once again the old system was quite better..&lt;br /&gt;
&lt;br /&gt;
--[[user:Pino|pino]] 11:32, 17 March 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Do me a favour... ==&lt;br /&gt;
&lt;br /&gt;
Could you somehow take care of [[Development/Tutorials/Phonon/Introduction]]? It's in no usable state and I would recommend deleting it, and rather directly point a link to the API. I'm asking here, cause you once moved the page. --[[Special:Contributions/88.66.153.231|88.66.153.231]] 00:44, 3 June 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Wiki Structure - sub-pages ==&lt;br /&gt;
&lt;br /&gt;
The example [[Help:Wiki_Structure#Sub-pages|here]] is not valid anymore (or at least there's nothing like that &amp;quot;on the very top of the page&amp;quot;). What's better to do with it? Thanks.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Wiki_Structure_(it)</id>
		<title>Help:Wiki Structure (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Wiki_Structure_(it)"/>
				<updated>2008-10-06T15:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Page fully translated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Wiki Structure}}&lt;br /&gt;
&lt;br /&gt;
Questa pagina illustra i metodi utilizzati per mantenere il wiki degli sviluppatori KDE.&lt;br /&gt;
&lt;br /&gt;
== Pagine radice ==&lt;br /&gt;
Le pagine più importanti in questo wiki sono le pagine radice (in ordine alfabetico):&lt;br /&gt;
&lt;br /&gt;
;[[Contribute]]&lt;br /&gt;
;[[Development]]&lt;br /&gt;
:[[Development/Architecture]]&lt;br /&gt;
:[[Development/FAQs]]&lt;br /&gt;
:[[Development/Further Information]]&lt;br /&gt;
:[[Development/Guidelines]]&lt;br /&gt;
:[[Development/Languages]]&lt;br /&gt;
:[[Development/Tools]]&lt;br /&gt;
:[[Development/Tutorials]]&lt;br /&gt;
;[[Getting Started]]&lt;br /&gt;
;[[ISV]]&lt;br /&gt;
;[[Policies]]&lt;br /&gt;
;[[Projects]]&lt;br /&gt;
;[[Schedules]]&lt;br /&gt;
;[[KDE System Administration]]&lt;br /&gt;
&lt;br /&gt;
Tutte le altre pagine o articoli appartengono ad una di queste pagine (o ad una delle loro sottopagine), ciò significa che facciamo ampio uso di sottopagine per mantenere la struttura e la gerarchia per non perdere la visuale d'insieme.&lt;br /&gt;
&lt;br /&gt;
=== Sottopagine ===&lt;br /&gt;
Una sottopagina è una relazione genitore-figlio. Nel seguente esempio '''Development''' è il ''genitore'' di '''Tutorials''', o, per dirla nel modo opposto la pagina '''Tutorials''' è una sottopagina (o un figlio) di '''Development'''.&lt;br /&gt;
&lt;br /&gt;
 [[Development/Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Usare sottopagine ha svariati vantaggi:&lt;br /&gt;
* forniscono in modo automatico una '''gerarchia''' implicita nell'URL stesso&lt;br /&gt;
* i '''link all'indietro''' generati automaticamente forniscono una facile navigazione&lt;br /&gt;
&lt;br /&gt;
Ad esempio, dai uno sguardo alla pagina&lt;br /&gt;
 [[Development/Architecture/KDE3/Library Structure]]&lt;br /&gt;
puoi notare i seguenti link all'inizio della pagina:&lt;br /&gt;
 &amp;lt; [[Development]] | [[Development/Architecture|Architecture]] | [[Development/Architecture/KDE3|KDE3]]&lt;br /&gt;
&lt;br /&gt;
== Categorie ==&lt;br /&gt;
&lt;br /&gt;
In breve, una [http://meta.wikimedia.org/wiki/Help:Category categoria] è un '''tag''' che appare alla fine di un articolo. In quanto tali, le categorie forniscono un'indicizzazione automatica che è utile come indice dei contenuti. Assieme ai link e ai template aiutano molto a strutturare un progetto.&lt;br /&gt;
&lt;br /&gt;
* [[Special:Categories|Lista di categorie]]&lt;br /&gt;
* [[Special:Unusedcategories|Lista di categorie non utilizzate]] - Sentiti libero di usarle&lt;br /&gt;
&lt;br /&gt;
Assicurati di leggere la pagina della categoria (ad esempio [[:Category:Documentation]]) prima di aggiungerla come tag in modo da usarla in modo corretto.&lt;br /&gt;
&lt;br /&gt;
== Pagine speciali importanti ==&lt;br /&gt;
Ci sono varie pagine speciali che aiutano a mantenere pulito il wiki:&lt;br /&gt;
&lt;br /&gt;
; Problemi che andrebbero sistemati prima possibile&lt;br /&gt;
:[[Special:Lonelypages]]&lt;br /&gt;
:[[Special:BrokenRedirects]]&lt;br /&gt;
:[[Special:DoubleRedirects]]&lt;br /&gt;
&lt;br /&gt;
; Problemi che andrebbero risolti nel tempo&lt;br /&gt;
:[[Special:Wantedpages]]&lt;br /&gt;
:[[Special:Wantedcategories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2008-09-28T20:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Added work in progress section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* 18/07/2008 - [[Help:Wiki_Translation_(it)|Help : Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
* 15/08/2008 - [[Help:Contents_(it)|Help : Contents]]&lt;br /&gt;
* 16/08/2008 - [[Help:Contribute_(it)|Help : Contribute]]&lt;br /&gt;
&lt;br /&gt;
== WORK IN PROGRESS ==&lt;br /&gt;
&lt;br /&gt;
* 28/09/2008 - [[User:Panda84/Help:Wiki_Structure_(it)|Help : Wiki Structure]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Wiki_Structure_(it)</id>
		<title>Help:Wiki Structure (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Wiki_Structure_(it)"/>
				<updated>2008-09-28T20:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Working copy, translation in progress.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Wiki Structure}}&lt;br /&gt;
&lt;br /&gt;
Questa pagina illustra i metodi utilizzati per mantenere il wiki degli sviluppatori KDE.&lt;br /&gt;
&lt;br /&gt;
== Pagine radice ==&lt;br /&gt;
Le pagine più importanti in questo wiki sono le pagine radice (in ordine alfabetico):&lt;br /&gt;
&lt;br /&gt;
;[[Contribute]]&lt;br /&gt;
;[[Development]]&lt;br /&gt;
:[[Development/Architecture]]&lt;br /&gt;
:[[Development/FAQs]]&lt;br /&gt;
:[[Development/Further Information]]&lt;br /&gt;
:[[Development/Guidelines]]&lt;br /&gt;
:[[Development/Languages]]&lt;br /&gt;
:[[Development/Tools]]&lt;br /&gt;
:[[Development/Tutorials]]&lt;br /&gt;
;[[Getting Started]]&lt;br /&gt;
;[[ISV]]&lt;br /&gt;
;[[Policies]]&lt;br /&gt;
;[[Projects]]&lt;br /&gt;
;[[Schedules]]&lt;br /&gt;
;[[KDE System Administration]]&lt;br /&gt;
&lt;br /&gt;
Tutte le altre pagine o articoli appartengono ad una di queste pagine (o ad una delle loro sottopagine), ciò significa che facciamo ampio uso di sottopagine per mantenere la struttura e la gerarchia per non perdere la visuale d'insieme.&lt;br /&gt;
&lt;br /&gt;
=== Sottopagine ===&lt;br /&gt;
Una sottopagina è una relazione genitore-figlio. Nel seguente esempio '''Development''' è il ''genitore'' di '''Tutorials''', o, per dirla nel modo opposto la pagina '''Tutorials''' è una sottopagina (o un figlio) di '''Development'''.&lt;br /&gt;
&lt;br /&gt;
 [[Development/Tutorials]]&lt;br /&gt;
&lt;br /&gt;
Using sub-pages has several advantages:&lt;br /&gt;
* they automatically provide us with a '''hierarchy''' which is reflected in the URL itself&lt;br /&gt;
* automatically generated ''backlinks'' provide easy navigation&lt;br /&gt;
&lt;br /&gt;
As an example, look at the page&lt;br /&gt;
 [[Development/Architecture/KDE3/Library Structure]]&lt;br /&gt;
you can see following the links on the very top of the page:&lt;br /&gt;
 &amp;lt; [[Development]] | [[Development/Architecture|Architecture]] | [[Development/Architecture/KDE3|KDE3]]&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
In short, a [http://meta.wikimedia.org/wiki/Help:Category category] is a '''tag''' which appears at the very bottom of an article. As such, categories provide automatic indexes that are useful as tables of contents. Together with links and templates they help structure a project.&lt;br /&gt;
&lt;br /&gt;
* [[Special:Categories|List of categories]]&lt;br /&gt;
* [[Special:Unusedcategories|List of unused categories]] - Feel free to use them&lt;br /&gt;
&lt;br /&gt;
Be sure to read the category page (e.g. [[:Category:Documentation]]) before tagging a page with it to make sure you're using it correctly.&lt;br /&gt;
&lt;br /&gt;
== Important special pages ==&lt;br /&gt;
There are several special pages which help us to maintain a clean wiki:&lt;br /&gt;
&lt;br /&gt;
; Issues which should be fixed as soon as possible&lt;br /&gt;
:[[Special:Lonelypages]]&lt;br /&gt;
:[[Special:BrokenRedirects]]&lt;br /&gt;
:[[Special:DoubleRedirects]]&lt;br /&gt;
&lt;br /&gt;
; Issues which should be fixed in time&lt;br /&gt;
:[[Special:Wantedpages]]&lt;br /&gt;
:[[Special:Wantedcategories]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Policies]]&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2008-08-16T10:04:43Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Added a new translated page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* 18/07/2008 - [[Help:Wiki_Translation_(it)|Help : Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
* 15/08/2008 - [[Help:Contents_(it)|Help : Contents]]&lt;br /&gt;
* 16/08/2008 - [[Help:Contribute_(it)|Help : Contribute]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Contents_(it)</id>
		<title>Help:Contents (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Contents_(it)"/>
				<updated>2008-08-16T10:02:53Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Corretto link: Help:Contribute è stata tradotta in italiano.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Contents}}&lt;br /&gt;
&lt;br /&gt;
Prima di cominciare ad aggiungere o cambiare i contenuti per favore leggi gli articoli riguardo:&lt;br /&gt;
* [[Help:Contribute_(it)|Contribuire a TechBase]]&lt;br /&gt;
* [[Help:Wiki Structure|Struttura del Wiki]]&lt;br /&gt;
* [[Help:Wiki Translation_(it)|Traduzione in altre lingue]]&lt;br /&gt;
* [[KDE_TechBase:Migrate_content|Migrare contenuti]]&lt;br /&gt;
* [[KDE_TechBase:Contributors|Lista di contributori attivi]] che si possono contattare.&lt;br /&gt;
&lt;br /&gt;
== Sintassi del Wiki ==&lt;br /&gt;
Per fare pratica con la sintassi di MediaWiki leggere:&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Editing&lt;br /&gt;
* http://meta.wikimedia.org/wiki/Help:Table&lt;br /&gt;
* http://en.wikipedia.org/wiki/Wikipedia:Extended_image_syntax&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Magic_words&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I comandi più importanti sono riassunti nella [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet guida rapida di Wikipedia]. Informazioni su come migrare i contenuti [[KDE TechBase:Migrate_content|possono essere trovate qui]].&lt;br /&gt;
&lt;br /&gt;
== Consigli ==&lt;br /&gt;
; Evidenziazione della sintassi&lt;br /&gt;
: Inserisci i tuoi frammenti di codice C++ Qt/KDE tra &amp;amp;lt;code cpp&amp;amp;gt;, &amp;amp;lt;code cpp n&amp;amp;gt;, &amp;amp;lt;code qt&amp;amp;gt; e &amp;amp;lt;/code&amp;amp;gt; per ottenere l'evidenziazione della sintassi (cpp == c++, qt == qt) e la numerazione delle righe (n). Sostituisci &amp;quot;cpp&amp;quot; con il relativo linguaggio usato, ad esempio &amp;quot;rubyqt&amp;quot; per Ruby e &amp;quot;pythonqt&amp;quot; per Python (al momento non ancora disponibili). Usa &amp;quot;ini&amp;quot; per i file .desktop e &amp;quot;xml&amp;quot; per i file XML.&lt;br /&gt;
&lt;br /&gt;
== Nuovi template ==&lt;br /&gt;
Per avere la lista delle pagine che usano un dato template andare alla corrispondente pagina template (ad esempio [[Template:movepage]]) e cliccare su &amp;quot;''Puntano qui''&amp;quot; nella toolbox a sinistra.&lt;br /&gt;
&lt;br /&gt;
; [[Template:movepage|&amp;lt;nowiki&amp;gt;{{movepage|url}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usare questo template per segnare una pagina come non completata.&lt;br /&gt;
&lt;br /&gt;
; [[Template:Improve|&amp;lt;nowiki&amp;gt;{{improve|explanation}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Pagine che devono essere ripulite, contengono sezioni vuote e/o liste di cose da fare sono segnate con questo template. Puoi aggiungere una spiegazione se vuoi (facoltativo).&lt;br /&gt;
&lt;br /&gt;
; [[Template:tip|&amp;lt;nowiki&amp;gt;{{tip|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere un consiglio al lettore.&lt;br /&gt;
&lt;br /&gt;
; [[Template:note|&amp;lt;nowiki&amp;gt;{{note|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere una nota esplicativa.&lt;br /&gt;
&lt;br /&gt;
; [[Template:warning|&amp;lt;nowiki&amp;gt;{{warning|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere un avvertimento.&lt;br /&gt;
&lt;br /&gt;
; [[Template:qt|&amp;lt;nowiki&amp;gt;{{qt|class-name}}&amp;lt;/nowiki&amp;gt;]] e [[Template:qt3|&amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per generare un link ad una classe Qt, ad esempio QWidget. Per una classe Qt3 usa &amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; [[Template:class|&amp;lt;nowiki&amp;gt;{{class|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per generare un link a una classe KDE, ad esempio KDialog.&lt;br /&gt;
&lt;br /&gt;
; [[Template:path|&amp;lt;nowiki&amp;gt;{{path|path-or-filename}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per percorsi e nomi di file, in questo modo avranno tutti uno stile uniforme.&lt;br /&gt;
&lt;br /&gt;
; [[Template:bug|&amp;lt;nowiki&amp;gt;{{bug|123456}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per creare in automatico un link al bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
; [[Template:KDE3|&amp;lt;nowiki&amp;gt;{{KDE3}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per segnare il contenuto di una pagina valido anche per KDE 3. Non segnare in questo modo pagine che non hanno contenuto tecnologico. Per contenuti relativi a KDE 4 usare &amp;lt;nowiki&amp;gt;[[Category:KDE4]]&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; [[Template:TutorialBrowser|&amp;lt;nowiki&amp;gt;{{TutorialBrowser|series|name|pre|next|reading}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Un template per la navigazione dei tutorial.&lt;br /&gt;
&lt;br /&gt;
; [[Template:Box|&amp;lt;nowiki&amp;gt;{{Box|caption|text|width|float}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per creare un riquadro con un etichetta ed un testo. Il parametro della larghezza è opzionale e può essere specificato sia in maniera assoluta (ad esempio 400px) sia in maniera relativa (ad esempio 50%). L'ultimo parametro è il valore della posizione, è anch'esso opzionale ed è impostato di default come centrato.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Contribute_(it)</id>
		<title>Help:Contribute (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Contribute_(it)"/>
				<updated>2008-08-16T10:00:14Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: First italian translation - Prima traduzione in italiano&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
{{Template:I18n/Language Navigation Bar|Help:Contribute}}&lt;br /&gt;
&lt;br /&gt;
Il tuo contributo al wiki di KDE TechBase è ben accetto. Per ottenere contenuti e articoli di alta qualità ci sono un po' di linee guida che devi rispettare. Questa è una breve introduzione a come modificare e contribuire al wiki.&lt;br /&gt;
&lt;br /&gt;
== I contenuti di KDE TechBase ==&lt;br /&gt;
&lt;br /&gt;
Il wiki di KDE TechBase è pensato per contenere informazioni tecniche relative a KDE, ad esempio:&lt;br /&gt;
* informazioni per gli sviluppatori (ad esempio [[Development/Tutorials_(it)|tutorial]])&lt;br /&gt;
* [[KDE System Administration|amministrazione di sistema con KDE]]&lt;br /&gt;
* regole e piani di lavoro&lt;br /&gt;
* eccetera&lt;br /&gt;
&lt;br /&gt;
Ulteriori dettagli possono essere trovati nell'articolo sulla [[Help:Wiki Structure|struttura del wiki]].&lt;br /&gt;
&lt;br /&gt;
[http://docs.kde.org Documentazione per l'utente] o [http://api.kde.org documentazione delle API] ''non'' vanno aggiunte qui. Per questioni non tecniche usare [http://wiki.kde.org il wiki di KDE].&lt;br /&gt;
&lt;br /&gt;
=== Dove inserire i nuovi articoli ===&lt;br /&gt;
&lt;br /&gt;
Il wiki di KDE TechBase usa sottopagine. Dai una rapida occhiata all'articolo riguardo la [[Help:Wiki Structure|struttura del wiki]]. Per farla breve: non aggiungere a caso pagine nel livello più alto.&lt;br /&gt;
&lt;br /&gt;
È possibile tradurre articoli di KDE TechBase in altre lingue. Leggi l'articolo riguardo la [[Help:Wiki Translation_(it)|traduzione del wiki]] per ulteriori dettagli.&lt;br /&gt;
&lt;br /&gt;
=== La procedura ===&lt;br /&gt;
&lt;br /&gt;
Vuoi aggiungere nuovo contenuto. Per mantenere alto lo standard di qualità per favore prima crea la pagina dell'articolo nella tua pagina personale (ad esempio User:foo/My Article). Una volta che è pronta, discuti l'articolo con altri sviluppatori e ricontrollala. Quando hai trovato il posto adatto dove inserirla sposta la pagina.&lt;br /&gt;
&lt;br /&gt;
== Le basi della modifica ==&lt;br /&gt;
&lt;br /&gt;
Nel wiki di KDE TechBase tutti gli utenti registrati possono modificare il contenuto e la struttura.&lt;br /&gt;
&lt;br /&gt;
=== Regole di revisione e convenzioni ===&lt;br /&gt;
&lt;br /&gt;
Assicurati che l'informazione che aggiungi sia rilevante al proposito specifico del wiki, in caso contrario i tuoi contenuti potrebbero essere rimossi. Puoi sempre usare le [[Help:Talk page|pagine  di ''Discussione'' o ''Talk'']] per fare domande o assicurarti che la tua idea venga accettata. Per favore assicurati anche che i tuoi contributi non violino alcuna licenza.&lt;br /&gt;
&lt;br /&gt;
=== Cominciare a modificare ===&lt;br /&gt;
&lt;br /&gt;
Per cominciare a modificare una pagina di [[Main Page|KDE TechBase]] clicca su '''Modifica''' nella parte superiore del wiki. Verrai portato alla pagina di modifica: qui avrai a disposizione un'area di testo contenente il ''wikitext'' ovvero il codice modificabile da cui il server produce poi la pagina finale visibile all'utente. ''Se vuoi solo fare esperimenti puoi esercitarti nella [[Sandbox|sandbox]], non farlo qui''.&lt;br /&gt;
&lt;br /&gt;
=== Inserire le modifiche ===&lt;br /&gt;
&lt;br /&gt;
Per cominciare è sufficiente inserire il proprio testo. Per migliorare l'aspetto e l'ordine è necessario usare gli appositi comandi wiki, ad esempio per creare dei link o dare un'impaginazione migliore. Per favore usa lo stile utilizzato anche negli altri articoli del wiki. Se segui queste semplici regole i tuoi contributi saranno più utili in quanto non richiederanno successive ripuliture.&lt;br /&gt;
&lt;br /&gt;
=== Riassumere le modifiche ===&lt;br /&gt;
&lt;br /&gt;
Scrivi un breve riassunto nel piccolo campo sotto l'area di testo, ad esempio &amp;quot;Corretto un errore di ortografia.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Anteprima prima di salvare ===&lt;br /&gt;
&lt;br /&gt;
Quando hai finito clicca su '''Visualizza anteprima''' per vedere come si presenteranno le tue modifiche '''prima''' di renderle permanenti. Ripeti il processo di modifica e anteprima finchè non sei soddisfatto, poi clicca su '''Salva la pagina''' e le tue modifiche saranno immediatamente applicate all'articolo.&lt;br /&gt;
&lt;br /&gt;
== Pagina dei comandi Wiki ==&lt;br /&gt;
&lt;br /&gt;
La wikipedia fornisce una rapida introduzione alla principale sintassi mediawiki. Per favore leggi l'apposita [http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page pagina di aiuto].&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2008-08-15T08:46:54Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Added a new translated paged.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* 18/07/2008 - [[Help:Wiki_Translation_(it)|Help : Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
* 15/08/2008 - [[Help:Contents_(it)|Help : Contents]]&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Contents_(it)</id>
		<title>Help:Contents (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Contents_(it)"/>
				<updated>2008-08-15T08:37:16Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: First italian translation - Prima traduzione in italiano&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Contents}}&lt;br /&gt;
&lt;br /&gt;
Prima di cominciare ad aggiungere o cambiare i contenuti per favore leggi gli articoli riguardo:&lt;br /&gt;
* [[Help:Contribute|Contribuire a TechBase]]&lt;br /&gt;
* [[Help:Wiki Structure|Struttura del Wiki]]&lt;br /&gt;
* [[Help:Wiki Translation_(it)|Traduzione in altre lingue]]&lt;br /&gt;
* [[KDE_TechBase:Migrate_content|Migrare contenuti]]&lt;br /&gt;
* [[KDE_TechBase:Contributors|Lista di contributori attivi]] che si possono contattare.&lt;br /&gt;
&lt;br /&gt;
== Sintassi del Wiki ==&lt;br /&gt;
Per fare pratica con la sintassi di MediaWiki leggere:&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Editing&lt;br /&gt;
* http://meta.wikimedia.org/wiki/Help:Table&lt;br /&gt;
* http://en.wikipedia.org/wiki/Wikipedia:Extended_image_syntax&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Magic_words&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I comandi più importanti sono riassunti nella [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet guida rapida di Wikipedia]. Informazioni su come migrare i contenuti [[KDE TechBase:Migrate_content|possono essere trovate qui]].&lt;br /&gt;
&lt;br /&gt;
== Consigli ==&lt;br /&gt;
; Evidenziazione della sintassi&lt;br /&gt;
: Inserisci i tuoi frammenti di codice C++ Qt/KDE tra &amp;amp;lt;code cpp&amp;amp;gt;, &amp;amp;lt;code cpp n&amp;amp;gt;, &amp;amp;lt;code qt&amp;amp;gt; e &amp;amp;lt;/code&amp;amp;gt; per ottenere l'evidenziazione della sintassi (cpp == c++, qt == qt) e la numerazione delle righe (n). Sostituisci &amp;quot;cpp&amp;quot; con il relativo linguaggio usato, ad esempio &amp;quot;rubyqt&amp;quot; per Ruby e &amp;quot;pythonqt&amp;quot; per Python (al momento non ancora disponibili). Usa &amp;quot;ini&amp;quot; per i file .desktop e &amp;quot;xml&amp;quot; per i file XML.&lt;br /&gt;
&lt;br /&gt;
== Nuovi template ==&lt;br /&gt;
Per avere la lista delle pagine che usano un dato template andare alla corrispondente pagina template (ad esempio [[Template:movepage]]) e cliccare su &amp;quot;''Puntano qui''&amp;quot; nella toolbox a sinistra.&lt;br /&gt;
&lt;br /&gt;
; [[Template:movepage|&amp;lt;nowiki&amp;gt;{{movepage|url}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usare questo template per segnare una pagina come non completata.&lt;br /&gt;
&lt;br /&gt;
; [[Template:Improve|&amp;lt;nowiki&amp;gt;{{improve|explanation}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Pagine che devono essere ripulite, contengono sezioni vuote e/o liste di cose da fare sono segnate con questo template. Puoi aggiungere una spiegazione se vuoi (facoltativo).&lt;br /&gt;
&lt;br /&gt;
; [[Template:tip|&amp;lt;nowiki&amp;gt;{{tip|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere un consiglio al lettore.&lt;br /&gt;
&lt;br /&gt;
; [[Template:note|&amp;lt;nowiki&amp;gt;{{note|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere una nota esplicativa.&lt;br /&gt;
&lt;br /&gt;
; [[Template:warning|&amp;lt;nowiki&amp;gt;{{warning|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per aggiungere un avvertimento.&lt;br /&gt;
&lt;br /&gt;
; [[Template:qt|&amp;lt;nowiki&amp;gt;{{qt|class-name}}&amp;lt;/nowiki&amp;gt;]] e [[Template:qt3|&amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per generare un link ad una classe Qt, ad esempio QWidget. Per una classe Qt3 usa &amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; [[Template:class|&amp;lt;nowiki&amp;gt;{{class|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per generare un link a una classe KDE, ad esempio KDialog.&lt;br /&gt;
&lt;br /&gt;
; [[Template:path|&amp;lt;nowiki&amp;gt;{{path|path-or-filename}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per percorsi e nomi di file, in questo modo avranno tutti uno stile uniforme.&lt;br /&gt;
&lt;br /&gt;
; [[Template:bug|&amp;lt;nowiki&amp;gt;{{bug|123456}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per creare in automatico un link al bugzilla di KDE.&lt;br /&gt;
&lt;br /&gt;
; [[Template:KDE3|&amp;lt;nowiki&amp;gt;{{KDE3}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per segnare il contenuto di una pagina valido anche per KDE 3. Non segnare in questo modo pagine che non hanno contenuto tecnologico. Per contenuti relativi a KDE 4 usare &amp;lt;nowiki&amp;gt;[[Category:KDE4]]&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; [[Template:TutorialBrowser|&amp;lt;nowiki&amp;gt;{{TutorialBrowser|series|name|pre|next|reading}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Un template per la navigazione dei tutorial.&lt;br /&gt;
&lt;br /&gt;
; [[Template:Box|&amp;lt;nowiki&amp;gt;{{Box|caption|text|width|float}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Usa questo template per creare un riquadro con un etichetta ed un testo. Il parametro della larghezza è opzionale e può essere specificato sia in maniera assoluta (ad esempio 400px) sia in maniera relativa (ad esempio 50%). L'ultimo parametro è il valore della posizione, è anch'esso opzionale ed è impostato di default come centrato.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Contents</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Contents"/>
				<updated>2008-08-15T08:12:15Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Fixed typo &amp;quot;tempate&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Contents}}&lt;br /&gt;
&lt;br /&gt;
Before you start to add or change content, please read the articles about the&lt;br /&gt;
* [[Help:Contribute|Contribute to TechBase]]&lt;br /&gt;
* [[Help:Wiki Structure|Wiki Structure]]&lt;br /&gt;
* [[Help:Wiki Translation|Translation into other Languages]]&lt;br /&gt;
* [[KDE_TechBase:Migrate_content|Migrate Content]]&lt;br /&gt;
* [[KDE_TechBase:Contributors|List of active contributors]], also contact points&lt;br /&gt;
&lt;br /&gt;
== Wiki Syntax ==&lt;br /&gt;
To get started with the MediaWiki syntax, read&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Editing&lt;br /&gt;
* http://meta.wikimedia.org/wiki/Help:Table&lt;br /&gt;
* http://en.wikipedia.org/wiki/Wikipedia:Extended_image_syntax&lt;br /&gt;
* http://en.wikipedia.org/wiki/Help:Magic_words&lt;br /&gt;
&lt;br /&gt;
The most important commands are summarized in the [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet Wikipedia Cheatsheet]. Information about how to migrate content [[KDE TechBase:Migrate_content|can be found here]].&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
; Syntax highlighting&lt;br /&gt;
: Wrap your C++ Qt/KDE code snippets in &amp;amp;lt;code cpp&amp;amp;gt;, &amp;amp;lt;code cpp n&amp;amp;gt;, &amp;amp;lt;code qt&amp;amp;gt; and &amp;amp;lt;/code&amp;amp;gt; to get syntax highlighting (cpp == c++, qt == qt) and numbered lines (n). Replace &amp;quot;cpp&amp;quot; with the language used, e.g. rubyqt for Ruby and pythonqt for Python (soon). Use &amp;quot;ini&amp;quot; for .desktop files, &amp;quot;xml&amp;quot; for XML files.&lt;br /&gt;
&lt;br /&gt;
== New Templates ==&lt;br /&gt;
To get a list of pages using a template, go to corresponding template page (e.g. [[Template:movepage]]) and click &amp;quot;''What links here''&amp;quot; in the toolbox.&lt;br /&gt;
&lt;br /&gt;
; [[Template:movepage|&amp;lt;nowiki&amp;gt;{{movepage|url}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to mark a page as not finished.&lt;br /&gt;
&lt;br /&gt;
; [[Template:Improve|&amp;lt;nowiki&amp;gt;{{improve|explanation}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Pages which need cleanups or contain empty sections and/or todos are marked with this template. Add an explanation if you want (optional)&lt;br /&gt;
&lt;br /&gt;
; [[Template:tip|&amp;lt;nowiki&amp;gt;{{tip|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to add a tip for the reader.&lt;br /&gt;
&lt;br /&gt;
; [[Template:note|&amp;lt;nowiki&amp;gt;{{note|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to add an explanatory note.&lt;br /&gt;
&lt;br /&gt;
; [[Template:warning|&amp;lt;nowiki&amp;gt;{{warning|text}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to add a warning.&lt;br /&gt;
&lt;br /&gt;
; [[Template:qt|&amp;lt;nowiki&amp;gt;{{qt|class-name}}&amp;lt;/nowiki&amp;gt;]] and [[Template:qt3|&amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to generate a link to a Qt class, e.g. QWidget. For Qt3 classes use &amp;lt;nowiki&amp;gt;{{qt3|class-name}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; [[Template:class|&amp;lt;nowiki&amp;gt;{{class|class-name}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to generate a link to a KDE class, e.g. KDialog.&lt;br /&gt;
&lt;br /&gt;
; [[Template:path|&amp;lt;nowiki&amp;gt;{{path|path-or-filename}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template for paths and filenames, this way all of them have a consistent style.&lt;br /&gt;
&lt;br /&gt;
; [[Template:bug|&amp;lt;nowiki&amp;gt;{{bug|123456}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to automatically create a link to KDE's bugzilla.&lt;br /&gt;
&lt;br /&gt;
; [[Template:KDE3|&amp;lt;nowiki&amp;gt;{{KDE3}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to mark the content of a page as applicable for either KDE 3. Don't tag technology agnostic pages. For KDE4 content, use &amp;lt;nowiki&amp;gt;[[Category:KDE4]]&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; [[Template:TutorialBrowser|&amp;lt;nowiki&amp;gt;{{TutorialBrowser|series|name|pre|next|reading}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: A template for tutorial navigation&lt;br /&gt;
&lt;br /&gt;
; [[Template:Box|&amp;lt;nowiki&amp;gt;{{Box|caption|text|width|float}}&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
: Use this template to create a box with a caption and a text. The width parameter is optional and can be specified absolute (400px) or relative (50%). The last parameter is the float value, which is also optional and defaults to center.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/User:Panda84</id>
		<title>User:Panda84</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/User:Panda84"/>
				<updated>2008-07-18T20:14:47Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: First version of my personal page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== whoami ==&lt;br /&gt;
&lt;br /&gt;
I'm an Italian KDE user willing to become a KDE developer sooner or later. :)&lt;br /&gt;
&lt;br /&gt;
I thought that the first step to become a developer was reading developer's documentation... and then why not translate it after reading?&lt;br /&gt;
&lt;br /&gt;
== DONE ==&lt;br /&gt;
&lt;br /&gt;
Pages translated:&lt;br /&gt;
* [[Help:Wiki_Translation_(it)|Wiki translation]] - let's start from the beginning, am I right? :)&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
I'll translate all pages that'll come on my way!&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/KDE_TechBase:Contributors</id>
		<title>KDE TechBase:Contributors</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/KDE_TechBase:Contributors"/>
				<updated>2008-07-18T20:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: Added myself to the italian team&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the contributors page.&lt;br /&gt;
&lt;br /&gt;
'''This site contains a list of ''active'' contributors. It should help to build teams which maintain KDE TechBase's content. If you have questions about KDE TechBase you can ask/email the corresponding person.'''&lt;br /&gt;
&lt;br /&gt;
Please add yourself to the list where appropriate. If you are inactive, please remove yourself again.&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
&lt;br /&gt;
This is a list of KDE TechBase administrators.&lt;br /&gt;
&lt;br /&gt;
* [[User:Danimo|Danimo]]&lt;br /&gt;
* [[User:Dhaumann|Dhaumann]], &amp;lt;dhaumann at kde dot org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reviewers and Article Writers ==&lt;br /&gt;
&lt;br /&gt;
If you are continuously reviewing KDE TechBase changes or writing articles add yourself to the list.&lt;br /&gt;
&lt;br /&gt;
* [[User:Dhaumann|Dhaumann]], &amp;lt;dhaumann at kde dot org&amp;gt;&lt;br /&gt;
* [[User:Milliams|Milliams]]&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translation Teams ==&lt;br /&gt;
&lt;br /&gt;
KDE TechBase is [[Help:Wiki Translation|translated]] into many languages. If you translate pages please add yourself to the right translation team.&lt;br /&gt;
&lt;br /&gt;
=== Chinese(simplified) Team ===&lt;br /&gt;
* [[User:Liangqi|Liangqi]], cavendish.qi at gmail dot com&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Spanish Team ===&lt;br /&gt;
* [[User:Martin J. Ponce|Martin J. Ponce]], mjp_ttc at yahoo dot com&lt;br /&gt;
* [[User:Aikurn|L. H. Urigüen]], aikurn at gmail dot com&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== German Team ===&lt;br /&gt;
* [[User:DrSlowDecay|DrSlowDecay]], kde at metalhorde dot de&lt;br /&gt;
* [[User:Rememberme|rememberme]] redict dot info at gmx dot net&lt;br /&gt;
* [[User:sschloenvoigt|Steffen Schloenvoigt]], steffen at schloenvoigt dot de &lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Italian Team ===&lt;br /&gt;
* [[User:Thunder Teaser|Thunder Teaser]], totokid at gmail dot com&lt;br /&gt;
* [[User:Panda84|Panda84]], panda84 at inwind dot it&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tamil Team ===&lt;br /&gt;
* [[User:Shriramadhas|Shriramadhas]], shriramadhas at gmail dot com&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ... Team ===&lt;br /&gt;
* name, &amp;lt;email&amp;gt;&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	<entry>
		<id>http://techbase.kde.org/Help:Wiki_Translation_(it)</id>
		<title>Help:Wiki Translation (it)</title>
		<link rel="alternate" type="text/html" href="http://techbase.kde.org/Help:Wiki_Translation_(it)"/>
				<updated>2008-07-18T19:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Panda84: First italian translation - Prima traduzione in italiano&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:I18n/Language Navigation Bar|Help:Wiki_Translation}}&lt;br /&gt;
Questo articolo descrive come '''tradurre articoli in altre lingue'''. Si prega di leggere anche l'ultima sezione relativa alle [[#Note importanti|note importanti]].&lt;br /&gt;
&lt;br /&gt;
== Passo 1: Abbreviazioni delle lingue ==&lt;br /&gt;
&lt;br /&gt;
Supponiamo ad esempio di voler tradurre la seguente pagina in tedesco:&lt;br /&gt;
* [[Development/Tutorials]]&lt;br /&gt;
L'abbreviazione per la lingua tedesca è '''de''', quindi tutti gli articoli in tale lingua termineranno con &amp;quot; (de)&amp;quot; (con uno spazio all'inizio).&lt;br /&gt;
&lt;br /&gt;
Riferimento:  [http://www.opticentre.net/FAQ/Languages/List-of-language-abbreviations/ lista delle abbreviazioni delle lingue].&lt;br /&gt;
&lt;br /&gt;
== Passo 2: Creare l'articolo ==&lt;br /&gt;
&lt;br /&gt;
Alcune volte un collegamento nella barra di scelta delle lingue è già presente. In tal caso è sufficiente cliccare sul link per tradurre nella relativa lingua. In caso contrario è necessario creare l'articolo manualmente:&lt;br /&gt;
* [[Development/Tutorials (de)]]&lt;br /&gt;
'''Come contenuto iniziale è consigliabile usare il contenuto della pagina in inglese corrispondente'''. In questo modo nessun contenuto va perso e altri lettori possono contribuire alla traduzione.&lt;br /&gt;
&lt;br /&gt;
== Passo 3: Barra di scelta delle lingue ==&lt;br /&gt;
&lt;br /&gt;
L'articolo deve contenere la seguente riga di codice come template al fine di mostrare la barra di scelta delle lingue:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{Template:I18n/Language Navigation Bar|Development/Tutorials}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Questa riga si espande nella barra di scelta delle lingue per l'articolo &amp;lt;tt&amp;gt;Development/Tutorials&amp;lt;/tt&amp;gt;. Notare che la riga non contiene le abbreviazioni delle lingue.&lt;br /&gt;
&lt;br /&gt;
== Passo 4: Lingue mancanti? ==&lt;br /&gt;
&lt;br /&gt;
Se la lingua non è presente nella barra di scelta è necessario cercare manualmente l'abbreviazione relativa (vedere Passo 1). Nell'esempio precedente l'abbreviazione era &amp;quot; (de)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Modificare la pagina [[Template:I18n/Language Navigation Bar]] e aggiungere una riga per la lingua in cui si vuole tradurre:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span lang=&amp;quot;de&amp;quot;&amp;gt;[[{{{1}}}_(de)|Deutsch]]&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Sostituire 'de' con l'abbreviazione della lingua corretta e inserire il relativo nome completo.&lt;br /&gt;
&lt;br /&gt;
== Note importanti ==&lt;br /&gt;
&lt;br /&gt;
Dato che il wiki usa [[Help:Wiki Structure|sottopagine]] è probabile che i traduttori possano incorrere nel seguente problema.&lt;br /&gt;
&lt;br /&gt;
Supponiamo esistano le seguenti pagine:&lt;br /&gt;
 1. Development/Tutorials&lt;br /&gt;
 2. Development/Tutorials/Debugging&lt;br /&gt;
Supponiamo inoltre che si voglia tradurre la pagina (1) in tedesco (suffisso ''de'').&lt;br /&gt;
&lt;br /&gt;
La pagina finale sarà&lt;br /&gt;
 3. Development/Tutorials_(de)&lt;br /&gt;
Il contenuto inglese di (2) usa link relativi come &amp;lt;tt&amp;gt;/Debugging&amp;lt;/tt&amp;gt;. Tradurre ''Debugging'' in (3) potrebbe causare i seguenti errori:&lt;br /&gt;
 Development/Tutorials_(de)/Debugging      # sbagliato, o&lt;br /&gt;
 Development/Tutorials_(de)/Debugging_(de) # sbagliato&lt;br /&gt;
'''Questo è un errore.'''&lt;br /&gt;
&lt;br /&gt;
La regola è che la l'abbreviazione della lingua deve apparire sempre alla fine dell'articolo, ad esempio il '''link corretto''' dovrebbe essere:&lt;br /&gt;
 Development/Tutorials/Debugging_(de)&lt;br /&gt;
Quindi è bene assicurarsi di adattare ovunque i link nell'articolo a percorsi assoluti (cioè nessuna barra '/' all'inizio nei link del wiki).&lt;br /&gt;
&lt;br /&gt;
== Controllo qualità ==&lt;br /&gt;
&lt;br /&gt;
Gli amministratori e contributori fanno del loro meglio per tenere d'occhio il contenuto, ma con le lingue straniere questo può essere difficoltoso. Sarebbe bene '''aggiungersi alla lista di osservazione''' (è sufficiente cliccare su ''Segui'' in alto a destra). In questo modo verranno notificate via email tutte le modifiche all'articolo. Questo aiuta a mantenere il wiki pulito ad esempio dallo spam, cosa che sfortunatamente è già capitata.&lt;br /&gt;
&lt;br /&gt;
È altresì consigliato '''aggiungersi al [[KDE_TechBase:Contributors#Translation_Teams|team di traduzione]]'''.&lt;/div&gt;</summary>
		<author><name>Panda84</name></author>	</entry>

	</feed>