Translations:QA/BugReport/55/fr

    From The Document Foundation Wiki

    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.