Translations:QA/BugReport/55/fr
LibreOffice, comme tout logicel, peut se bloquer ou générer un crash (plantage) dans l'environnement Windows. Dans ce cas malheureux, des données de débogage peuvent être collectées par l'utilisateur pour donner aux développeurs un chance de résoudre le bug. C'est ce qu'on appelle un backtrace (journal de la pile des appels système) qui doit de préférence être joint au rapport de bug dans un document texte. Cet article décrit étape par étape comment obtenir un backtrace avec WinDbg (outil de débogage pour Windows).
Installation du débogueur (une seule fois)
- Utilisateurs Windows 8 : Installer Standalone Debugging Tools for Windows 8.1
http://msdn.microsoft.com/en-us/windows/hardware/hh852365, lien direct : http://go.microsoft.com/fwlink/?LinkID=323507
L'installation va peut-être demander de redémarrer l'ordinateur pendant l'installation - redémarrer, puis relancer le programme d'installation. Il est suffisant de seulement installer Debugging Tools for Windows (outils de débogage pour Windows). - Utilisateurs Windows XP, Vista, 7 : Installer Microsoft Windows SDK for Windows 7 and .NET Framework 4, lien direct : http://www.microsoft.com/en-us/download/confirmation.aspx?id=8279
Pendant l'installation, qui nécessite Microsoft .NET Framework 4, décocher toutes les autres options sauf Debugging Tools for Windows. - Démarrer WinDbg (X86) (par défaut dans le groupe de programmes Windows Kits), et définir le symbols search path (chemin où le débogueur recherche les fichiers) via
Pour les versions officielles (à partir de la 4.2.0rc1), entrer ceciCACHE*C:\symbols;SRV*http://dev-downloads.libreoffice.org/symstore/symbols;SRV*http://msdl.microsoft.com/download/symbols
Pour déboguer aussi bien les versions officielles que les Master (depuis Win-x86@39 tinderbox), indiquer à la place :CACHE*C:\symbols;SRV*https://dev-builds.libreoffice.org/daily/master/Win-x86@39/symbols;SRV*http://dev-downloads.libreoffice.org/symstore/symbols;SRV*http://msdl.microsoft.com/download/symbols
▸ - Maintenant exécuter ▸ pour enregistrer ces paramètres.
- Si vous disposez de Visual Studio Express 2005 ou ultérieure, vous pouvez également l'utiliser pour obtenir le backtrace. Au lieu des paramètres ci-dessus vous ajouterez les URLs
https://dev-builds.libreoffice.org/daily/master/Win-x86@39/symbols
ethttp://dev-downloads.libreoffice.org/symstore/symbols
aux serveurs mentionnés dans le menu ▸ ▸ ▸ de Visual Studio Express.
Installation d'une version de LibreOffice permettant de générer un Backtrace
En option, vous pouvez recourir à un environnement virtuel en utilisant vhd images avec n'impore que système d'exploitation permettant la virtualisation et les images vhd. Versions officielles
- Vous devez uiliser une version 4.2.0rc1 ou ultérieure pour pouvoir accéder aux symboles sur le serveur.
Daily (versions développeur journalières de la branche Master)
- Vous devez installer la version développeur la plus récente depuis la Win-x86@39 tinderbox à partir d'ici :
https://dev-builds.libreoffice.org/daily/master/Win-x86@39/current
Débogage
Pour commencer à déboguer, ne lancer WinDbg qu'après que votre version à tester de LibreOffice soit installée et en cours d'exécution. Ensuite attacher WinDbg au process soffice.bin
▸ . WinDbg commencera sortir des informations.Microsoft (R) Windows Debugger Version 6.12.0002.633 X86 Copyright (c) Microsoft Corporation. All rights reserved. *** wait with pending attach Symbol search path is: c:\lodev\symbols;SRV*c:\Symbols\mssymbols\*http://msdl.microsoft.com/download/symbols Executable search path is: ModLoad: 01280000 0132a000 C:\Program Files (x86)\LOdev 3.5\program\soffice.bin [...] ModLoad: 64450000 644f9000 C:\Program Files (x86)\LOdev 3.5\program\lnglo.dll ModLoad: 5f520000 5fa4d000 C:\Program Files (x86)\LOdev 3.5\program\xolo.dll (13b8.d64): Break instruction exception - code 80000003 (first chance) eax=7efaf000 ebx=00000000 ecx=00000000 edx=77d7f85a esi=00000000 edi=00000000 eip=77cf000c esp=08d3fa30 ebp=08d3fa5c iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!DbgBreakPoint: 77cf000c cc int 3 0:011>
Taper g dans la fenêtre de commande (ou choisir
▸ ).0:011> g
Reproduire un plantage dans LibreOffice.
0:011> g ModLoad: 05950000 05bfc000 C:\Program Files (x86)\LOdev 3.5\program\fwklo.dll ModLoad: 05950000 05bfc000 C:\Program Files (x86)\LOdev 3.5\program\fwklo.dll (13b8.dd8): C++ EH exception - code e06d7363 (first chance) [...] ModLoad: 74a30000 74a36000 C:\Windows\SysWOW64\sensapi.dll (13b8.dd8): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=9162b873 ebx=00000000 ecx=9162b873 edx=9162b873 esi=602ff600 edi=00000000 eip=6623b085 esp=00bec8fc ebp=00bec908 iopl=0 nv up ei ng nz na po nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010282 sal3!rtl_uString_newFromAscii+0x15: 6623b085 0fbe11 movsx edx,byte ptr [ecx] ds:002b:9162b873=?? 0:000>
Taper !analyze -v dans la fenêtre de commande
0:000> !analyze -v
WinDbg commencera l'analyse de l'exception. Attendre patiemment la sortie de :
0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* FAULTING_IP: sal3!rtl_uString_newFromAscii+15 [c:\lodev\source\sal\rtl\source\ustring.cxx @ 437] 6623b085 0fbe11 movsx edx,byte ptr [ecx] EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 6623b085 (sal3!rtl_uString_newFromAscii+0x00000015) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 9162b873 Attempt to read from address 9162b873 FAULTING_THREAD: 00000dd8 DEFAULT_BUCKET_ID: INVALID_POINTER_READ PROCESS_NAME: soffice.bin ERROR_CODE: (NTSTATUS) 0xc0000005 - Instrukcja spod 0x%08lx odwo EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - Instrukcja spod 0x%08lx odwo EXCEPTION_PARAMETER1: 00000000 EXCEPTION_PARAMETER2: 9162b873 READ_ADDRESS: 9162b873 FOLLOWUP_IP: sal3!rtl_uString_newFromAscii+15 [c:\lodev\source\sal\rtl\source\ustring.cxx @ 437] 6623b085 0fbe11 movsx edx,byte ptr [ecx] MOD_LIST: <ANALYSIS/> NTGLOBALFLAG: 0 APPLICATION_VERIFIER_FLAGS: 0 PRIMARY_PROBLEM_CLASS: INVALID_POINTER_READ BUGCHECK_STR: APPLICATION_FAULT_INVALID_POINTER_READ LAST_CONTROL_TRANSFER: from 657221a0 to 6623b085 STACK_TEXT: 00bec908 657221a0 00bec920 9162b873 91df8a88 sal3!rtl_uString_newFromAscii+0x15 [c:\lodev\source\sal\rtl\source\ustring.cxx @ 437] [...] FAULTING_SOURCE_CODE: 433: 434: if ( pCharStr ) 435: { 436: const sal_Char* pTempStr = pCharStr; > 437: while( *pTempStr ) 438: pTempStr++; 439: nLen = pTempStr-pCharStr; 440: } 441: else 442: nLen = 0; [...] Followup: MachineOwner ---------
Copier tout le journal de la session dans un nouveau document au format texte et le joindre au rapport de bug. LibreOffice est verrouillé par Windbg donc vous devez fermer Windbg (i.e.
▸ ). Choisir "No" à la demande "Save information for workspace?". Ceci fermera à la fois Windbg et LibreOffice.Produire un mini dump
Parfois WinDbg ne peut attraper proprement l'exception. Dans de tels cas nous devons produire un mini dump qui peut ensuite être chargé et parsé dans le débogueur. Pour produire un tel dump vous pouvez utiliser librement l'utilitaire ProcDump comme ceci : Assurez-vous que votre version de débogage de LibreOffice est en cours d'exécution. Dans la fenêtre de commande, taper :
d:\procdump4.01>procdump.exe soffice.bin -h
Reproduire un plantage. Quand le blocage de LibreOffice est détecté ProcDump vous informe du succès de la création du mini dump.
d:\procdump4.01>procdump.exe soffice.bin -h ProcDump v4.0 - Writes process dump files Copyright (C) 2009-2011 Mark Russinovich Sysinternals - www.sysinternals.com Process: soffice.bin (1964) CPU threshold: n/a Performance counter: n/a Commit threshold: n/a Threshold seconds: n/a Number of dumps: 1 Hung window check: Enabled Exception monitor: Disabled Terminate monitor: Disabled Dump file: d:\procdump4.01\soffice.dmp [09:02.39] Hung window detected. Writing dump file d:\procdump4.01\soffice_120614_090239.dmp ... Dump written. Dump count reached. d:\procdump4.01>
Ouvrir WinDbg et charger le fichier .dmp (
▸ ).Loading Dump File [D:\soffice_120601_075839.dmp] User Mini Dump File: Only registers, stack and portions of memory are available Comment: ' *** procdump soffice.bin -h *** Hung window detected: 110946' Symbol search path is: c:\lodev\symbols;SRV*c:\Symbols\mssymbols\*http://msdl.microsoft.com/download/symbols Executable search path is: Windows 7 Version 7601 (Service Pack 1) MP (2 procs) Free x86 compatible Product: WinNt, suite: SingleUserTS Machine Name: Debug session time: Fri Jun 1 07:58:39.000 2012 (UTC + 2:00) System Uptime: not available Process Uptime: 0 days 0:00:44.000 ................................................................ ................................................................ ............................................................ Loading unloaded module list .............. eax=00000000 ebx=00e7b174 ecx=00000000 edx=00000000 esi=00000002 edi=00000000 eip=77d0013d esp=00e7b124 ebp=00e7b1c0 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246 ntdll!ZwWaitForMultipleObjects+0x15: 77d0013d 83c404 add esp,4 0:000>
Taper !analyze -v dans la fenêtre de commande
0:000> !analyze -v
WinDbg démarrera l'analyse de l'exception. Attendre patiemment la sortie de :
0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* FAULTING_IP: +612e2faf0463dc04 00000000 ?? ??? EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 00000000 ExceptionCode: 80000003 (Break instruction exception) ExceptionFlags: 00000000 NumberParameters: 0 FAULTING_THREAD: 00000f90 DEFAULT_BUCKET_ID: STATUS_BREAKPOINT PROCESS_NAME: soffice.bin [...] Followup: MachineOwner ---------
Copier tout le journal de la session dans un nouveau document au format texte et le joindre au rapport de bug.
Produire une sortie de débogage supplémentaire
Dans certains cas un développeur peut vous demander d'appliquer un patch à un fichier source et de réunir des informations supplémentaires en utilisant la fonction OutputDebugString disponible dans : Télécharger librement l'utilitaire DebugView. Assurez-vous que votre version de débogage de LibreOffice et de DebugView soient en cours d'exécution. Reproduire un plantage. DebugView collectera des informations de débogage :
00000001 0.00000000 [5112] WinInetBackend A 759F0000 00000002 0.00007052 [5112] WinInetBackend B 759F6F21 00000003 0.01316426 [5112] WinInetBackend C 0 14 0 00000004 0.01324074 [5112] WinInetBackend D 0 14 0 6F0C82FD 00000028
Copier les infomations dans un nouveau document au format texte et le joindre au rapport de bug.
Voir aussi
- Report a crash in LibreOffice like a pro vidéo en anglais
- Archive de la liste Developers
Comment obtenir un journal valgrind (sous Linux)
Le journal valgrind est utile lorsque l'application plante ou gèle et que le backtrace n'est pas suffisant. Vous devez suivre les étapes suivantes :
- Installez les packages
libreoffice*-debuginfo
. (si disponibles pour votre distribution Linux) - Démarrez le débogueur avec le binaire réel et journalisez la sortie :
cd /opt/libreoffice/program
valgrind --tool=memcheck --num-callers=128 --trace-children=yes ./soffice.bin 2>&1 | tee /tmp/valgrind.log
- Exécutez les étapes nécessaires à la reproduction du plantage ou du gel. Remarquez que cela fonctionne bien en général avec valgrind parce que cela aide à garder la mémoire propre. De toute façon cela doit détecter le danger et mettre des informations utiles dans le journal. Remarquez que valgrind imprime de nombreux avertissements tout le temps. Vous devez réellement reproduire les étapes problématiques pour que les informations importantes se retrouvent dans le journal.
- Quittez LibreOffice
- Veuillez compresser le journal valgring.log s'il est supérieur à 10kB
bzip2 /tmp/valgrind.log
- Attachez le journal au rapport de bogue.