Dela via


Linux-symboler och -källor

Den här artikeln beskriver hur WinDbg stöder linux-standardsymboler och -källor. Stöd för felsökning i Linux kräver WinDbg version 1.2402.24001.0 eller senare.

DebugInfoD-symbolservrar

Windows-felsökningsprogrammet använder debugInfoD-standarden för automatisk nedladdning av byggartefakter för Linux. Jämförelsevis är DebugInfoD en kombination av Microsofts symbolserver och källservertekniker. Den tillåter automatisk nedladdning av tre artefakttyper (körbara filer (ELF), felsökningsinformation (DWARF) och källkod (kod) baserat på build-id. Olika distributioner av Linux är nu värdar för sina egna DebugInfoD-servrar som tillhandahåller några av artefakttyperna. De olika DebugInfoD-servrarna visas i ELFUTILS https://debuginfod.elfutils.org.

Allmän information om DebugInfoD finns här:

Taggen DebugInfoD* kan peka på en eller flera DebugInfoD-servrar med varje server-URL formaterad som https://domain.com och avgränsad med *. Servrarna genomsöks i samma ordning som i källsökvägen och filerna hämtas från den första matchande URL:en.

Du kan till exempel ange symbolsökvägen så här.

.sympath+ DebugInfoD*https://debuginfod.elfutils.org

Använd kommandot !sym noisy för att visa information om symbolinläsning. Mer information finns i !sym.

Kommandot source path (.srcpath, .lsrcpath (Set Source Path)) stöder filhämtning från DebugInfoD-servrar via taggen DebugInfoD*, vilket möjliggör hämtning av källkodsartefakter. Du kan till exempel ange källsökvägen, så här.

.srcpath+ DebugInfoD*https://debuginfod.elfutils.org

För mer information, se Källkodens utökade åtkomst.

DWARF-symboler

DWARF är ett vanligt standardiserat felsökningsdataformat. DWARF designades ursprungligen tillsammans med körbart och länkbart format (ELF), även om det är oberoende av objektfilformat. Mer information finns i https://en.wikipedia.org/wiki/DWARF och för standardversion 5, se DWARF Version 5.

Använd kommandot object dump för att fastställa dvärgsymbolversionen. I det här exemplet version 5.

bob@BOB:/mnt/c/Users/BOB$ objdump -g DisplayGreeting | grep -A 2 'Compilation Unit @'
  Compilation Unit @ offset 0x0:
   Length:        0x285c (32-bit)
   Version:       5

WinDbg DWARF-stöd

WinDbg stöder följande användning av DWARF och ELF.

  • Linux-användarläge – Öppna Linux ELF Core Dumps (-z <core dump>) och göra felsökning och analys efter döden med fullständiga privata DWARF-symboler.

  • Linux Kernel Mode – Öppning av Linux-kärndumpar (ELF VMCORE) och utförande av efterkoll och analys med fullständiga privata DWARF-symboler.

  • Linux Kernel Mode – Öppna Linux Kernel-komprimerade KDUMP-filer och utföra felsökning och efteranalys med fullständiga privata DWARF-symboler (WinDbg stöder endast ZLIB-komprimerade KDUMP-filer. LZO- och Snappy-komprimerade KDUMP-filer stöds inte.)

  • Öppna ELF-avbildningar (-z <ELF image>) och undersöka innehåll, demontera osv.

  • Andra scenarier – Förstå ELF-avbildningar och DVÄRG-symboler i blandade PE/ELF-miljöer (t.ex. felsökning av Open Enclave-komponenter som läses in i Windows. Mer information finns i Open Enclave-felsökning.)

Stöd för WinDbg GDBServer Linux

GNU Debugger, GDBServer används i Linux för att stödja WinDbg-anslutningen. Mer information om GDBServer finns i https://en.wikipedia.org/wiki/Gdbserver. En plats där du kan visa dokumentationen för gdb-fjärrfelsökning finns här – https://sourceware.org/gdb/current/onlinedocs/gdb#Remote-Debugging

Mer information om hur du använder GDBServer med WinDbg och en kodgenomgång finns i fjärrprocessfelsökning i Linux live. Exemplen här använder Ubuntu som körs under Windows-undersystemet för Linux (WSL), men andra Linux-implementeringar kan också användas.

DWARF-implementering

DVÄRG-symboler stöds inbäddade i den ursprungliga avbildningen (en felsökningsbinär) eller separeras till en separat ELF-avbildning (ett felsökningspaket).

För att Linux DWARF-stacken ska lyckas måste den ursprungliga binäravbilden för vilken modul som helst som läses in i Linux-processen kunna hittas.

DWARF-symboler/ELF-bilder (avskalade eller inte) kan hittas via felsökarens sökväg eller symbolservern (indexerad enligt .NET Core via GNU Build ID-hash).

DVÄRG-symboler kan hittas via en installation av felsökningspaket i Linux-stil. Detta anges av en katalog med namnet .build-id i symbolsökvägen. Under detta finns kataloger namngivna utifrån den första byten i GNU Build ID Hash. Under varje sådan katalog finns en fil med namnet <remaining 18 bytes of GNU Build ID hash>.debug.

När felsökningsprogrammet öppnar DWARF-symboler utför det ett första indexeringssteg eftersom själva formatet inte innehåller nödvändiga uppslagstabeller. För stora uppsättningar dvärgsymboler (t.ex. privat DVÄRG-information för Linux-kerneln) kan det ta 10–30 sekunder.

!addsourcemap för automatisk källhämtning från känt repo/commit

Om du felsöker komponenter som skapats från en känd lagringsplats och incheckning finns det ett tillägg, !addsourcemap, med felsökningskommandot kan du berätta för felsökaren att för en viss modul och sökväg vill du automatiskt hämta källor från en känd URL. Användningen av tillägget är:

!addsourcemap <module> <local spec> <remote spec>

Var:

<module> är namnet på modulen av intresse.

<local spec> är sökvägen till källor i modulen som kommer att letas upp via en URL. Den här sökvägen bör sluta med ett jokertecken.

<remote spec> är url:en där filer som matchar <local spec> ska letas upp. Den här sökvägen bör sluta med ett jokertecken som ersätts med hur jokertecknet i <local spec> matchar en viss källsökväg.

Om du vill ange källkartan kontrollerar du att modulen finns med hjälp av lm (Lista inlästa moduler). Bestäm sedan källans fjärrplats.

Det här exemplet anger vmlinux-modulen till en specifik version som är tillgänglig på GitHub.

0:000> !addsourcemap vmlinux /build/linux/* https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
Source map /build/linux/* -> https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/ successfully added

När kommandot sourcemap har utfärdats utlöser ett antal saker en källbelastning, till exempel att växla bildrutor fram och tillbaka eller ladda om med kommandot .reload. Därefter sker en automatisk källhämtning från GitHub.

!sourcemaps

Använd kommandot !sourcemaps för att visa en lista över befintliga källkartor.

0:000> !sourcemaps
Source maps for vmlinux.6:
    /build/linux/* -> https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/

!removesourcemaps

Använd kommandot !removesourcemaps för att ta bort en befintlig källkarta.

0:000> !removesourcemaps vmlinux /build/linux/* https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
1 source maps successfully removed

Felsöka DWARF-symboler

Om du felsöker Linux-/Android-dumpar (eller andra mål som använder DVÄRG-symboler) kanske du vill titta på det råa innehållet i symboler för att förstå varför lokala variabler, typdefinitioner eller funktionsdefinitioner är felaktiga. För att göra detta har felsökningsprogrammet några inbyggda tilläggskommandon för att dumpa råinnehållet i DWARF-symboler. Använd även Linux-verktyg som readelf och dumpdwarf för att visa information om symbolens interna funktioner.

readelf-kommando

Använd kommandot readelf i Linux-kommandotolken för att visa felsökningsversions-ID:t som skapades för exempelprogrammet DisplayGreeting som skapades i Fjärrprocessfelsökning i Linux live. I det här exemplet returneras ett bygg-ID för aba822dd158b997b09903d4165f3dbfd37f5e5c1.

Bob@BOB6:/mnt/c/Users/Bob$ readelf -n DisplayGreeting

Displaying notes found in: .note.gnu.property
  Owner                Data size        Description
  GNU                  0x00000020       NT_GNU_PROPERTY_TYPE_0
      Properties: x86 feature: IBT, SHSTK
        x86 ISA needed: x86-64-baseline

Displaying notes found in: .note.gnu.build-id
  Owner                Data size        Description
  GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: aba822dd158b997b09903d4165f3dbfd37f5e5c1

Displaying notes found in: .note.ABI-tag
  Owner                Data size        Description
  GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 3.2.0

Readelf kan användas tillsammans med grep för att visa symbolversionen.

 readelf --debug-dump=info DisplayGreeting | grep -A 2 'Compilation Unit @'
  Compilation Unit @ offset 0x0:
   Length:        0x285c (32-bit)
   Version:       5

dvärgdump

Linux-kommandot dwarfdump skriver ut eller kontrollerar DWARF-avsnitt enligt specifika alternativ. Använd dwarfdump -h för att visa de många alternativen.

bob@BOB6:/mnt/c/Users/BOB$ dwarfdump -h

Mer information om hur du använder dwarfdump på Ubuntu finns i dwarfdump .

!diesym

Det här felsökningskommandot visar DIE (eller DIE-underträdet) för den symbol som finns i det angivna uttrycket (kan vara en adress, ett funktionsnamn osv.) med en valfri angiven rekursionsnivå. Den hittar DIE för symbolen (oftast en funktion, men det kan även vara data osv.) som finns på en specifik adress och utför en diagnostisk dump av DIE på ett sätt som liknar att köra verktygen dwarfdump eller llvm-dwarfdump på symbolerna för att hitta DIE.

!diesym [options] <expression>

-r# : dumpa N nivåer rekursivt. Normalt sett är detta en enda, och endast själva DIE dumpas.

<expression> – Adressen för att hitta DIE ges av ett uttryck. Det kan vara en platt hexadress (0x<blah>) eller ett i övrigt unikt funktionsnamn.

Den måste utvärderas av datamodellens standardutvärdering. Använd dx-kommandot för att verifiera att modelluttrycket. Mer information om hur du använder dx-kommandot finns i dx (Visa objektmodelluttryck för felsökningsprogram).

0:000> dx DisplayGreeting!GetCppConGreeting
DisplayGreeting!GetCppConGreeting                 : DisplayGreeting!GetCppConGreeting+0x0 [Type: GetCppConGreeting]

Visa DIE-symbolinformation för exempelprogrammet DisplayGreeting, funktionen GetCppConGreeting.

0:000> !diesym DisplayGreeting!GetCppConGreeting
0x2816: DW_TAG_subprogram [^^^]
    DW_AT_external          (true)
    DW_AT_name              'GetCppConGreeting'
    DW_AT_decl_file         1 ('/mnt/c/Users/BOB/DisplayGreeting.cpp')
    DW_AT_decl_line         0x7
    DW_AT_decl_column       0x6
    DW_AT_linkage_name      '_Z17GetCppConGreetingPwm'
    DW_AT_low_pc            0x11E9
    DW_AT_high_pc           +0x3c (== 0x1225)
    DW_AT_frame_base        DW_OP_call_frame_cfa 
    DW_AT_call_all_tail_calls   (true)

Använd alternativet -r2 för att visa ytterligare en nivå av DIE-symbolinformation.

0:000> !diesym -r2 DisplayGreeting!GetCppConGreeting
0x2816: DW_TAG_subprogram [^^^]
    DW_AT_external          (true)
    DW_AT_name              'GetCppConGreeting'
    DW_AT_decl_file         1 ('/mnt/c/Users/BOB/DisplayGreeting.cpp')
    DW_AT_decl_line         0x7
    DW_AT_decl_column       0x6
    DW_AT_linkage_name      '_Z17GetCppConGreetingPwm'
    DW_AT_low_pc            0x11E9
    DW_AT_high_pc           +0x3c (== 0x1225)
    DW_AT_frame_base        DW_OP_call_frame_cfa 
    DW_AT_call_all_tail_calls   (true)

    0x2834: DW_TAG_formal_parameter [^^^]
        DW_AT_name              'buffer'
        DW_AT_decl_file         1 ('/mnt/c/Users/BOB/DisplayGreeting.cpp')
        DW_AT_decl_line         0x7
        DW_AT_decl_column       0x21
        DW_AT_type              (CU + 0x12f7 == 0x12f7)
        DW_AT_location          DW_OP_fbreg(-40) 

!dö

!die visar DIE (eller DIE-underträd) för vilken DIE som helst vid det angivna offsetuttrycket i DWARF-sektionen för felsökning med en eventuellt angiven rekursionsnivå.

!die [-r#] [-t] -m <module base expression> <offset expression>

-r# : dumpa N nivåer rekursivt.

-t : Om DIE är inom en typenhet i .debug_types i stället för en kompileringsenhet inom .debug_info måste du ange växeln -t.

Ange en -m <module base expression> som ger basadressen för den modul som du frågar efter.

<offset expression> är storleken på DIE-förskjutningen.

På Linux-kommandoraden använder du dwarfdump med -r för att skriva ut avsnittet .debug_aranges i DWARF-filen för att hitta DIE-offset.

bob@BOB6:/mnt/c/Users/BOB$ dwarfdump -r DisplayGreeting

.debug_aranges

COMPILE_UNIT<header overall offset = 0x00000000>:
< 0><0x0000000c>  DW_TAG_compile_unit
                    DW_AT_producer              GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection
                    DW_AT_language              DW_LANG_C_plus_plus_14
                    DW_AT_name                  DisplayGreeting.cpp
                    DW_AT_comp_dir              /mnt/c/Users/BOB
                    DW_AT_ranges                0x0000000c

      Offset of rnglists entries: 0x0000000c
      [ 0] start,end             0x000011e9 0x0000134a
      [ 1] start,end             0x0000134a 0x00001368
      [ 2] start,end             0x00001368 0x0000137b
      [ 3] start,end             0x0000137b 0x0000138d
      [ 4] end of list
                    DW_AT_low_pc                0x00000000
                    DW_AT_stmt_list             0x00000000


arange starts at 0x000011e9, length of 0x00000161, cu_die_offset = 0x0000000c
arange starts at 0x0000134a, length of 0x0000001e, cu_die_offset = 0x0000000c
arange starts at 0x00001368, length of 0x00000013, cu_die_offset = 0x0000000c
arange starts at 0x0000137b, length of 0x00000012, cu_die_offset = 0x0000000c

Observera DW_AT_ranges värdet för 0x0000000c. I felsökningsprogrammet använder du det förskjutningsvärdet och modulnamnet DisplayGreeting för att visa information om DIE-symbolen.

0:000> !die -m DisplayGreeting 0x0000000c
0xc: DW_TAG_compile_unit [^^^]
    DW_AT_producer          'GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection'
    DW_AT_language          0x21
    DW_AT_name              
    DW_AT_comp_dir          
    DW_AT_ranges            
        [0x11e9 - 0x134a)
        [0x134a - 0x1368)
        [0x1368 - 0x137b)
        [0x137b - 0x138d)
    DW_AT_low_pc            0x0
    DW_AT_stmt_list        

!dieancestry

Kommandot !dieancestry fungerar ungefär som !die förutom att det går upp i DIE-trädet mot den innehållande kompilerings- eller typenheten i stället för nedåt i trädet.

!dieancestry [-r#] [-t] -m <module base expression> <offset expression>

-r# : dumpa N nivåer rekursivt.

Ange en -m <module base expression> som ger basadressen för den modul som du frågar efter.

<offset expression> är storleken på DIE-förskjutningen.

Exempel:

0:000> !dieancestry -m DisplayGreeting 0x0000000c
0xc: DW_TAG_compile_unit [^^^]
    DW_AT_producer          'GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection'
    DW_AT_language          0x21
    DW_AT_name              
    DW_AT_comp_dir          
    DW_AT_ranges            
        [0x11e9 - 0x134a)
        [0x134a - 0x1368)
        [0x1368 - 0x137b)
        [0x137b - 0x138d)
    DW_AT_low_pc            0x0
    DW_AT_stmt_list       

Observera att länkar, till exempel till föräldrar eller syskon, kan klickas för att möjliggöra ytterligare bläddring av dvärgsymbolträdet.

0:000> !die -r2 -m 0x555555554000 0xc
0xc: DW_TAG_compile_unit [^^^]
    DW_AT_producer          'GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection'
    DW_AT_language          0x21
    DW_AT_name              
    DW_AT_comp_dir          
    DW_AT_ranges            
        [0x11e9 - 0x134a)
        [0x134a - 0x1368)
        [0x1368 - 0x137b)
        [0x137b - 0x138d)
    DW_AT_low_pc            0x0
    DW_AT_stmt_list         

    0x2a: DW_TAG_namespace [^^^]
        DW_AT_name              'std'
        DW_AT_decl_file         9 ('/usr/include/c++/11/bits/exception_ptr.h')
        DW_AT_decl_line         0x116
        DW_AT_decl_column       0xb
        DW_AT_sibling           (CU + 0xf01 == 0xf01)

    0xf01: DW_TAG_base_type [^^^]
        DW_AT_byte_size         0x1
        DW_AT_encoding          DW_ATE_boolean (2)
        DW_AT_name              'bool'

    0xf08: DW_TAG_base_type [^^^]
        DW_AT_byte_size         0x8
        DW_AT_encoding          DW_ATE_unsigned (7)
        DW_AT_name              'long unsigned int'

...
   

Alla utdata visas inte.

!dwunwind

!dwunwind liknar .fnent (Visningsfunktionsdata) för PE-bilder. Den visar DWARF-avvecklingsreglerna för en adress som anges av uttrycket. Det liknar även kommandot readelf --unwind som visar varva ned information när den är tillgänglig.

!dwunwind <expression>

I det här exemplet visas varva ned-reglerna för funktionen GetCppConGreeting i DisplayGreeting-programmet.

0:000> !dwunwind DisplayGreeting!GetCppConGreeting
DW_FRAME_SAME_VAL: 0('rax'), 1('rdx'), 2('rcx'), 3('rbx'), 4('rsi'), 5('rdi'), 6('rbp'), 7('rsp'), 8('r8'), 9('r9'), 10('r10'), 11('r11'), 12('r12'), 13('r13'), 14('r14'), 15('r15')
0('CFA'): DW_EXPR_OFFSET 7('rsp') + 8
16('<Return Address>'): DW_EXPR_OFFSET 12290('CFA') + -8

Då visas avrullningsstacken för instruktionspekarens register.

0:000> !dwunwind @rip
DW_FRAME_SAME_VAL: 0('rax'), 1('rdx'), 2('rcx'), 4('rsi'), 5('rdi'), 7('rsp'), 8('r8'), 9('r9'), 10('r10'), 11('r11'), 14('r14'), 15('r15')
0('CFA'): DW_EXPR_OFFSET 7('rsp') + 208
3('rbx'): DW_EXPR_OFFSET 12290('CFA') + -40
6('rbp'): DW_EXPR_OFFSET 12290('CFA') + -32
12('r12'): DW_EXPR_OFFSET 12290('CFA') + -24
13('r13'): DW_EXPR_OFFSET 12290('CFA') + -16
16('<Return Address>'): DW_EXPR_OFFSET 12290('CFA') + -8

Här är ett exempel på programräknare.

   0:000> !dwunwind @pc
   DW_FRAME_SAME_VAL: 0('x0'), 1('x1'), 2('x2'), 3('x3'), 4('x4'), 5('x5'), 6('x6'), 7('x7'), 8('x8'), 9('x9'), 10('x10'), 11('x11'), 12('x12'), 13('x13'), 14('x14'), 15('x15'), 16('x16'), 17('x17'), 18('x18'), 31('sp'), 32('pc')
   0('CFA'): DW_EXPR_OFFSET 31('sp') + 208
   19('x19'): DW_EXPR_OFFSET 1436('CFA') + -192
   20('x20'): DW_EXPR_OFFSET 1436('CFA') + -184
   21('x21'): DW_EXPR_OFFSET 1436('CFA') + -176
   22('x22'): DW_EXPR_OFFSET 1436('CFA') + -168
   23('x23'): DW_EXPR_OFFSET 1436('CFA') + -160
   24('x24'): DW_EXPR_OFFSET 1436('CFA') + -152
   25('x25'): DW_EXPR_OFFSET 1436('CFA') + -144
   26('x26'): DW_EXPR_OFFSET 1436('CFA') + -136
   27('x27'): DW_EXPR_OFFSET 1436('CFA') + -128
   28('x28'): DW_EXPR_OFFSET 1436('CFA') + -120
   29('fp'): DW_EXPR_OFFSET 1436('CFA') + -208
   30('lr'): DW_EXPR_OFFSET 1436('CFA') + -200

!dietree

Dumpar DIE-trädet för en given modul på en specificerad rekursionsnivå, likt att köra verktygen dwarfdump eller llvm-dwarfdump på symbolerna och därmed hitta DIE.

!dietree [OPTIONS] -m <module base> <offset expression>

-r# : Ange rekursionsnivå

-t : Dumpa .debug_types och inte .debug_info

Modulbasen för modulen som innehåller DIE måste anges av alternativet -m <expression>.

<offset expression> är storleken på DIE-förskjutningen.

Exempel:

0:000> !dietree -m DisplayGreeting 0x0000000c
0xc: DW_TAG_compile_unit [^^^]
    DW_AT_producer          'GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection'
    DW_AT_language          0x21
    DW_AT_name              
    DW_AT_comp_dir          
    DW_AT_ranges            
        [0x11e9 - 0x134a)
        [0x134a - 0x1368)
        [0x1368 - 0x137b)
        [0x137b - 0x138d)
    DW_AT_low_pc            0x0
    DW_AT_stmt_list  

Använd alternativet -r2 för att visa ytterligare värden i dietree.

0:000> !dietree -r2 -m DisplayGreeting 0x0000000c
0xc: DW_TAG_compile_unit [^^^]
    DW_AT_producer          'GNU C++17 11.4.0 -mtune=generic -march=x86-64 -g -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection'
    DW_AT_language          0x21
    DW_AT_name              
    DW_AT_comp_dir          
    DW_AT_ranges            
        [0x11e9 - 0x134a)
        [0x134a - 0x1368)
        [0x1368 - 0x137b)
        [0x137b - 0x138d)
    DW_AT_low_pc            0x0
    DW_AT_stmt_list         

    0x2a: DW_TAG_namespace [^^^]
        DW_AT_name              'std'
        DW_AT_decl_file         9 ('/usr/include/c++/11/bits/exception_ptr.h')
        DW_AT_decl_line         0x116
        DW_AT_decl_column       0xb
        DW_AT_sibling           (CU + 0xf01 == 0xf01)

    0xf01: DW_TAG_base_type [^^^]
        DW_AT_byte_size         0x1
        DW_AT_encoding          DW_ATE_boolean (2)
        DW_AT_name              'bool'

    0xf08: DW_TAG_base_type [^^^]
        DW_AT_byte_size         0x8
        DW_AT_encoding          DW_ATE_unsigned (7)
        DW_AT_name              'long unsigned int'

    0xf0f: DW_TAG_base_type [^^^]
        DW_AT_byte_size         0x1
        DW_AT_encoding          DW_ATE_unsigned_char (8)
        DW_AT_name              'unsigned char'

...

Alla utdata visas inte. Observera att länkar, till exempel till syskon, kan klickas för att tillåta ytterligare bläddring av dvärgsymbolträdet.

!dielocal

Letar upp DIE för den lokala variabeln med namnet "name" och utför en diagnostikdumpning av DIE som liknar att köra dwarfdump eller llvm-dwarfdump på symbolerna och hitta DIE.

!dielocal [options] <name>

-r# : dumpa N nivåer rekursivt. Normalt sett är detta en enda, och endast själva DIE dumpas.

<name> : lokal variabel med namnet "name".

Exempel:

0:000> !dielocal greeting
0x2806: DW_TAG_variable [^^^]
    DW_AT_name              'greeting'
    DW_AT_decl_file         1 ('/mnt/c/Users/BOB/DisplayGreeting.cpp')
    DW_AT_decl_line         0xf
    DW_AT_decl_column       0x1d
    DW_AT_type              (CU + 0xb18 == 0xb18)
    DW_AT_location          DW_OP_fbreg(-240) 

Se även

Utökad åtkomstkod för källkod

ELFUTILS-felsökningsinfod

DWARF version 5

Använda Symboler

!sym

Linux-kraschdumpar

Felsökning av fjärrprocess i Linux live