Símbolos e fontes do Linux
Este artigo descreve como o WinDbg oferece suporte a símbolos e fontes padrão do Linux. O suporte para depuração no Linux requer o WinDbg versão 1.2402.24001.0 ou superior.
Servidores de símbolos DebugInfoD
O depurador Window usa o padrão DebugInfoD para download automático de artefatos de compilação para Linux. Comparativamente, o DebugInfoD é uma combinação das tecnologias de servidor de símbolos e servidor de origem da Microsoft. Ele permite o download automático de três tipos de artefatos (executáveis (ELF), informações de depuração (DWARF) e código-fonte (código) com base no build-id). Várias distribuições do Linux agora hospedam seus próprios servidores DebugInfoD que fornecem alguns dos tipos de artefatos. Os vários servidores DebugInfoD estão listados em ELFUTILS https://debuginfod.elfutils.org.
Informações gerais sobre DebugInfoD estão disponíveis aqui:
A DebugInfoD*
tag pode apontar para um ou mais servidores DebugInfoD com cada URL de servidor formatada como https://domain.com
e separada por *
. Os servidores serão pesquisados na mesma ordem listada no caminho de origem e os arquivos serão recuperados da primeira URL correspondente.
Por exemplo, você pode definir o caminho do símbolo assim.
.sympath+ DebugInfoD*https://debuginfod.elfutils.org
Use o comando para exibir informações sobre o !sym noisy
carregamento de símbolos. Para obter mais informações, consulte !sym.
O comando source path (.srcpath, .lsrcpath (Set Source Path)) oferece suporte à recuperação de arquivos de servidores DebugInfoD por meio da tag DebugInfoD*
, que permite a recuperação de artefatos de código-fonte. Por exemplo, você pode definir o caminho de origem, assim.
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org
Para obter mais informações, consulte Acesso estendido ao código-fonte.
Símbolos DWARF
DWARF é um formato de dados de depuração padronizado e amplamente utilizado. DWARF foi originalmente projetado junto com Executável e Linkable Format (ELF), embora seja independente de formatos de arquivo de objeto. Para obter mais informações, consulte https://en.wikipedia.org/wiki/DWARF e para a versão 5 padrão, consulte DWARF Versão 5.
Use o comando object dump para determinar a versão do símbolo DWARF. Neste exemplo, a versão 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
Suporte WinDbg DWARF
WinDbg suporta os seguintes usos de DWARF e ELF.
Modo de Usuário Linux - Abrindo Linux ELF Core Dumps (
-z <core dump>
) e fazendo depuração e análise post-mortem com símbolos DWARF privados completos.Linux Kernel Mode - Abrindo dumps do kernel Linux (ELF VMCORE) e fazendo depuração e análise post-mortem com símbolos DWARF privados completos.
Linux Kernel Mode - Abrindo KDUMPs compactados do Linux Kernel e fazendo depuração e análise post-mortem com símbolos DWARF privados completos (WinDbg suporta apenas arquivos KDUMP compactados ZLIB. Os KDUMPs compactados LZO e Snappy não são suportados).
Abertura de imagens ELF (
-z <ELF image>
) e exame de conteúdo, desmontagem, etc.Outros cenários - Noções básicas sobre imagens ELF e símbolos DWARF em ambientes mistos PE/ELF (por exemplo: depuração de componentes Open Enclave carregados no Windows. Para obter mais informações, consulte Depuração do Open Enclave.)
Suporte ao WinDbg GDBServer Linux
O Depurador GNU, GDBServer é usado no Linux para suportar a conexão WinDbg. Para obter mais informações sobre GDBServer, consulte https://en.wikipedia.org/wiki/Gdbserver. Um lugar para ver a documentação para depuração remota de gdb é aqui - https://sourceware.org/gdb/current/onlinedocs/gdb#Remote-Debugging
Para obter mais informações, sobre como usar o GDBServer com o WinDbg e um passo a passo de código, consulte Depuração de processo remoto ao vivo do Linux. Os exemplos aqui usam o Ubuntu rodando sob o Windows Subsystem for Linux (WSL), mas outras implementações Linux também podem ser usadas.
Implementação do DWARF
Os símbolos DWARF são suportados incorporados na imagem original (um binário de depuração) ou removidos em uma imagem ELF separada (um pacote de depuração).
Para que a caminhada da pilha Linux DWARF tenha sucesso, a imagem binária original de qualquer módulo carregado no processo do Linux deve ser capaz de ser encontrada.
Símbolos DWARF/imagens ELF (despojadas ou não) podem ser encontradas através do sympath do depurador ou do servidor de símbolos (indexado conforme .NET Core através do hash GNU Build ID).
Os símbolos DWARF podem ser encontrados através de uma instalação de pacote de depuração no estilo Linux. Isso é dado por um diretório nomeado .build-id
no caminho do símbolo. Sob isso estão diretórios nomeados de acordo com o primeiro byte do hash GNU Build ID. Sob cada um desses diretórios há um arquivo chamado <remaining 18 bytes of GNU Build ID hash>
.debug.
Quando o depurador abre símbolos DWARF, ele executa uma etapa de indexação inicial, pois o formato em si não inclui tabelas de pesquisa necessárias. Para grandes conjuntos de símbolos DWARF (por exemplo: informações privadas DWARF para o kernel Linux), isso pode levar de 10 a 30 segundos.
!addsourcemap para recuperação automática de código-fonte de repo / commit conhecido
Se você estiver depurando componentes criados a partir de um repositório e confirmação conhecidos, há uma extensão, o comando , debugger permite que você diga ao depurador que, !addsourcemap
para um determinado módulo e caminho, você gostaria de recuperar automaticamente fontes de uma URL conhecida. O uso da extensão é:
!addsourcemap <module> <local spec> <remote spec>
Em que:
<module>
é o nome do módulo de interesse.
<local spec>
é o caminho das fontes dentro desse módulo que será pesquisado através de uma URL. Esse caminho deve terminar em um curinga.
<remote spec>
é a URL na qual os arquivos correspondentes <local spec>
serão pesquisados. Esse caminho deve terminar em um curinga que será substituído por como o curinga corresponde <local spec>
a um caminho de origem específico.
Para definir o mapa de origem, confirme se o módulo está presente usando lm (List Loaded Modules). Em seguida, determine o local remoto da fonte.
Este exemplo define o módulo vmlinux como uma compilação específica disponível no 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
Depois que o comando sourcemap for emitido, várias coisas acionarão uma carga de origem, por exemplo, alternar quadros para frente e para trás ou recarregar, usando o comando .reload. Depois disso, e uma extração automática de origem do GitHub acontecerá.
!sourcemaps
Use o comando para listar !sourcemaps
mapas de origem existentes.
0:000> !sourcemaps
Source maps for vmlinux.6:
/build/linux/* -> https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
!removesourcemaps
Use o comando !removesourcemaps
para remover um mapa de origem existente.
0:000> !removesourcemaps vmlinux /build/linux/* https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
1 source maps successfully removed
Solução de problemas de símbolos DWARF
Se você estiver depurando dumps Linux/Android (ou outros destinos que usam símbolos DWARF), convém examinar o conteúdo bruto dos símbolos para entender por que variáveis locais, definições de tipo ou definições de função estão incorretas. Para fazer isso, o depurador tem alguns comandos de extensão internos para despejar o conteúdo bruto de símbolos DWARF. Além disso, use utilitários Linux, como readelf e dumpdwarf, para exibir informações internas de símbolos.
comando readelf
Use o comando readelf no prompt de comando do Linux para exibir o ID de compilação de depuração que foi criado para o programa DisplayGreeting de exemplo que foi criado na depuração de processo remoto ao vivo do Linux. Neste exemplo, uma ID de compilação de aba822dd158b997b09903d4165f3dbfd37f5e5c1 é retornada.
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 pode ser usado com grep para retornar a versão do símbolo.
readelf --debug-dump=info DisplayGreeting | grep -A 2 'Compilation Unit @'
Compilation Unit @ offset 0x0:
Length: 0x285c (32-bit)
Version: 5
dwarfdump
O comando dwarfdump linux imprime ou verifica seções DWARF conforme solicitado por opções específicas. Use dwarfdump -h para ver as muitas opções.
bob@BOB6:/mnt/c/Users/BOB$ dwarfdump -h
Para obter mais informações sobre como usar o dwarfdump no Ubuntu, consulte dwarfdump .
!diesym
Este comando do depurador exibirá o DIE (ou subárvore DIE) para qualquer símbolo que esteja na expressão dada (pode ser um endereço, um nome de função, etc.) com um nível de recursão opcionalmente especificado. Ele localiza o DIE para o símbolo (normalmente função, mas pode ser dados, etc...) contido em um determinado endereço e executa um despejo de diagnóstico do DIE semelhante a executar dwarfdump ou llvm-dwarfdump nos símbolos e encontrar o DIE.
!diesym [options] <expression>
-r#
: despejar níveis de N recursivamente. Normalmente, este é um e apenas o DIE em si é despejado.
<expression>
- O endereço para localizar o DIE é dado por uma expressão. Pode ser um endereço hexadecimal plano (0x<blah>
) ou pode ser um nome de função exclusivo.
Ele precisa ser avaliável pela avaliação padrão do modelo de dados. Use o comando dx para validar que a expressão do modelo. Para obter mais informações sobre usar o comando dx, consulte dx (expressão para exibir modelo de objeto de depurador).
0:000> dx DisplayGreeting!GetCppConGreeting
DisplayGreeting!GetCppConGreeting : DisplayGreeting!GetCppConGreeting+0x0 [Type: GetCppConGreeting]
Exibir informações de símbolo DIE para o programa DisplayGreeting de exemplo, função 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)
Use a opção -r2 para exibir um nível adicional de informações de símbolo DIE.
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)
!die
!die
exibirá o DIE (ou subárvore DIE) para qualquer DIE na expressão de deslocamento fornecida dentro da seção de depuração DWARF com um nível de recursão opcionalmente especificado.
!die [-r#] [-t] -m <module base expression> <offset expression>
-r#
: despejar níveis de N recursivamente.
-t
: Se o DIE estiver dentro de uma unidade de tipo em .debug_types em vez de uma unidade de compilação dentro de .debug_info, você deve especificar a opção -t.
Forneça um -m <module base expression>
que dê o endereço base de qualquer módulo sobre o qual você está consultando.
O <offset expression>
é o tamanho do deslocamento DIE.
No prompt do Linux, use dwarfdump com o -r para imprimir a seção .debug_aranges do arquivo DWARF para localizar o deslocamento DIE.
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
Observe o valor DW_AT_ranges de 0x0000000c
. No depurador, use esse valor de deslocamento e o nome do módulo de DisplayGreeting para exibir informações de símbolo DIE.
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
O comando !dieancestry
se comporta de forma semelhante !die
, exceto que ele sobe na árvore DIE em direção à compilação ou unidade de tipo que contém, em vez de descer na árvore.
!dieancestry [-r#] [-t] -m <module base expression> <offset expression>
-r#
: despejar níveis de N recursivamente.
Forneça um -m <module base expression>
que dê o endereço base de qualquer módulo sobre o qual você está consultando.
O <offset expression>
é o tamanho do deslocamento DIE.
Exemplo:
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
Observe que os links, por exemplo, para pais ou irmãos, são clicáveis para permitir a travessia adicional da árvore de símbolos DWARF.
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'
...
Nem toda a saída é mostrada.
!dwunwind
!dwunwind
é um pouco semelhante a .fnent (Exibir dados da função) para imagens PE. Ele exibe as regras de desbobinamento DWARF para um endereço dado pela expressão. Também é semelhante ao comando readelf --unwind, que exibe informações de descontração, quando está disponível.
!dwunwind <expression>
Este exemplo exibe as regras de desenrolar para a função GetCppConGreeting no programa DisplayGreeting.
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
Isso exibe a pilha de desenrolamento do registrador de ponteiro de instrução.
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
Aqui está um exemplo de contador de programa.
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
Despeja a árvore DIE para um determinado módulo em um determinado nível de recursão semelhante a executar dwarfdump ou llvm-dwarfdump nos símbolos e encontrar o DIE.
!dietree [OPTIONS] -m <module base> <offset expression>
-r#
: Especificar o nível de recursão
-t
: Despejar .debug_types e não .debug_info
A base do módulo que contém o DIE deve ser dada pela opção -m <expression>
.
O <offset expression>
é o tamanho do deslocamento DIE.
Exemplo:
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
Use a opção -r2 para exibir valores adicionais na árvore de dados.
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'
...
Nem toda a saída é mostrada. Observe que os links, por exemplo, para irmãos, são clicáveis para permitir a travessia adicional da árvore de símbolos DWARF.
!dielocal
Localiza o DIE para a variável local chamada "name" e executa um dump de diagnóstico do DIE semelhante a executar dwarfdump ou llvm-dwarfdump nos símbolos e localizar o DIE.
!dielocal [options] <name>
-r#
: despejar níveis de N recursivamente. Normalmente, este é um e apenas o DIE em si é despejado.
<name>
: variável local denominada "name".
Exemplo:
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)