Translations:QA/BugReport/55/fr

From The Document Foundation Wiki
Jump to: navigation, search

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 File ▸ Symbol File Path...
    Pour les versions officielles (à partir de la 4.2.0rc1), entrer ceci 
    CACHE*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 File ▸ Save workspace 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 et http://dev-downloads.libreoffice.org/symstore/symbols aux serveurs mentionnés dans le menu Tools ▸ Options ▸ Debugging ▸ Symbols 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 File ▸ Attach to a Process.... 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 Debug ▸ Go).

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. File ▸ Exit). 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 (File ▸ Open Crash Dump...).

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

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 :

  1. Installez les packages libreoffice*-debuginfo. (si disponibles pour votre distribution Linux)
  2. 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
  3. 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.
  4. Quittez LibreOffice
  5. Veuillez compresser le journal valgring.log s'il est supérieur à 10kB
    bzip2 /tmp/valgrind.log
  6. Attachez le journal au rapport de bogue.