Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede WinDbg'nin standart Linux sembollerini ve kaynaklarını nasıl desteklediği açıklanmaktadır. Linux'ta hata ayıklama desteği için WinDbg sürüm 1.2402.24001.0 veya üzeri gerekir.
DebugInfoD sembol sunucuları
Window hata ayıklayıcısı, Linux için derleme yapıtlarının otomatik olarak indirilmesi için DebugInfoD standardını kullanır. DebugInfoD, Microsoft'un sembol sunucusu ve kaynak sunucu teknolojilerinin bir bileşimidir. Derleme tanımlayıcısına göre üç nesne türünün (yürütülebilir dosyalar (ELF), DWARF hata ayıklama bilgileri ve kaynak kod) otomatik olarak indirilmesine olanak tanır. Linux'un çeşitli dağıtımları, nesne türlerinden bazılarını sağlayan kendi DebugInfoD sunucularını artık barındırıyor. Çeşitli DebugInfoD sunucuları ELFUTILS https://debuginfod.elfutils.orgadresinde listelenmiştir.
DebugInfoD hakkında genel bilgileri burada bulabilirsiniz:
DebugInfoD* etiketi, her bir sunucu URL'si https://domain.com biçiminde biçimlendirilmiş ve * ile ayrılmış olarak bir veya daha fazla DebugInfoD sunucusuna işaret edebilir. Sunucular, kaynak yolda listelenen sırayla aranacak ve dosyalar eşleşen ilk URL'den alınacaktır.
Örneğin, simge yolunu şöyle ayarlayabilirsiniz.
.sympath+ DebugInfoD*https://debuginfod.elfutils.org
!sym noisy Simge yükleme hakkındaki bilgileri görüntülemek için komutunu kullanın. Daha fazla bilgi için bkz. !sym.
Kaynak yol komutu (.srcpath, .lsrcpath (Kaynak Yolu Ayarla)) etiketi aracılığıyla DebugInfoD* DebugInfoD sunucularından dosya almayı destekler ve bu da kaynak kod yapıtlarının alınmasını sağlar. Örneğin, kaynak yolu şöyle ayarlayabilirsiniz.
.srcpath+ DebugInfoD*https://debuginfod.elfutils.org
Daha fazla bilgi için bkz. Kaynak Kodu Genişletilmiş Erişim.
DWARF sembolleri
DWARF yaygın olarak kullanılan, standartlaştırılmış bir hata ayıklama veri biçimidir. CÜCE ilk olarak Yürütülebilir ve Bağlanabilir Biçim (ELF) ile birlikte tasarlanmıştır, ancak nesne dosyası biçimlerinden bağımsızdır. Daha fazla bilgi için bkz. https://en.wikipedia.org/wiki/DWARF ve sürüm 5 standardı için bkz. DWARF Versiyon 5.
DWARF sembol versiyonunu belirlemek için objdump komutunu kullanın. Bu örnekte, sürüm 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 Desteği
WinDbg, DWARF ve ELF kullanımını aşağıdaki şekillerde destekler.
Linux Kullanıcı Modu - Linux ELF Çekirdek Dökümlerini (
-z <core dump>) açma ve tam özel DWARF sembolleriyle ölüm sonrası hata ayıklama ve analiz yapma.Linux Çekirdek Modu - Linux Çekirdeği (ELF VMCORE) dökümlerini açma ve tam özel DWARF sembolleriyle hata ayıklama ve analiz yapma.
Linux Çekirdek Modu - Linux Çekirdeği sıkıştırılmış KDUMP'leri açarak ve tam özel DWARF sembolleriyle hata ayıklaması ve analiz yapması (WinDbg yalnızca ZLIB sıkıştırılmış KDUMP dosyalarını destekler. LZO ve Snappy sıkıştırılmış KDUMP'ler desteklenmez.)
ELF Görüntülerini (
-z <ELF image>) açma ve içerikleri inceleme, ayrıştırma vb.Diğer Senaryolar - Karışık PE/ELF ortamlarında ELF görüntülerini ve DWARF sembollerini anlama (örneğin: Windows'a yüklenen Open Enclave bileşenlerinde hata ayıklama. Daha fazla bilgi için bkz Open Enclave hata ayıklama.)
WinDbg GDBServer Linux desteği
GNU Hata Ayıklayıcısı, GDBServer, WinDbg bağlantısını desteklemek için Linux üzerinde kullanılır. GDBServer hakkında daha fazla bilgi için bkz https://en.wikipedia.org/wiki/Gdbserver. . Uzak gdb hata ayıklama belgelerini görüntülemek için burada bir yer vardır - https://sourceware.org/gdb/current/onlinedocs/gdb#Remote-Debugging
Daha fazla bilgi için WinDbg ve kod kılavuzu ile GDBServer kullanma hakkında bkz. Linux canlı uzaktan işlem hata ayıklama. Buradaki örneklerde Linux için Windows Alt Sistemi (WSL) altında çalışan Ubuntu kullanılmaktadır ancak diğer Linux uygulamaları da kullanılabilir.
DWARF Uygulaması
DWARF sembolleri, orijinal imajın içine (hata ayıklama binary'si) gömülü veya ayrı bir ELF imajına (hata ayıklama paketi) ayrılmış olarak desteklenir.
Linux DWARF yığın izlemesinin başarılı olması için, Linux işlemine yüklenen herhangi bir modülün özgün ikili görüntüsünün bulunabilmesi gerekir.
DWARF sembolleri/ELF görüntüleri (soyulmuş veya soyulmamış) hata ayıklayıcının sembol yolu veya sembol sunucusu aracılığıyla bulunabilir (GNU Derleme Kimliği karmasına göre .NET Core için dizinlenmiştir).
DWARF sembolleri, Linux tarzı hata ayıklama paketi yüklenerek bulunabilir. Bu, sembol yolunda adlı .build-id bir dizin tarafından verilir. Bunun altında, GNU Derleme Kimliği karmasının ilk baytına göre adlandırılmış dizinler bulunmaktadır. Bu tür dizinlerin altında .debug adlı <remaining 18 bytes of GNU Build ID hash>bir dosya bulunur.
Hata ayıklayıcı CÜCE simgelerini açtığında, biçimin kendisi gerekli arama tablolarını içermediğinden ilk dizin oluşturma adımını gerçekleştirir. Büyük CÜCE sembol kümeleri için (ör. Linux çekirdeği için özel CÜCE bilgileri), bu işlem 10 - 30 saniye sürebilir.
Bilinen depo/commit'ten otomatik kaynak alma için !addsourcemap
Bilinen bir depo ve işlemeden oluşturulan bileşenlerde hata ayıklarsanız, bir uzantısı vardır, !addsourcemaphata ayıklayıcısı komutu hata ayıklayıcıya belirli bir modül ve yol için bilinen bir URL'den kaynakları otomatik olarak almak istediğinizi söylemenizi sağlar. Uzantının kullanımı:
!addsourcemap <module> <local spec> <remote spec>
Nerede:
<module> , ilgilendiğim modülün adıdır.
<local spec> , bir URL aracılığıyla aranacak olan bu modüldeki kaynakların yoludur. Bu yol joker karakterle bitmelidir.
<remote spec> , eşleşen <local spec> dosyaların aranacağı URL'dir. Bu yol, <local spec> içindeki joker karakterin belirli bir kaynak yolla nasıl eşleştiğine göre değiştirilecek olan bir joker karakterle bitmelidir.
Kaynak haritayı ayarlamak için modülün lm (Yüklenen Modülleri Listele) kullanarak mevcut olduğunu onaylayın. Ardından kaynağın uzak konumunu belirleyin.
Bu örnek, vmlinux modülünü GitHub'da kullanılabilen belirli bir derlemeye ayarlar.
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
Sourcemap komutu verildikten sonra, kaynak yüklemesini tetikleyen birçok şey vardır, örneğin, .reload komutunu kullanarak veya çerçeveler arasında ileri geri geçiş yaparak yeniden yükleme gerçekleştirmek gibi. Bundan sonra GitHub'dan otomatik bir kaynak çekme gerçekleşir.
!sourcemaps
!sourcemaps Mevcut kaynak eşlemeleri listelemek için komutunu kullanın.
0:000> !sourcemaps
Source maps for vmlinux.6:
/build/linux/* -> https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
!removesourcemaps
Mevcut bir kaynak eşlemeyi kaldırmak için !removesourcemaps komutunu kullanın.
0:000> !removesourcemaps vmlinux /build/linux/* https://raw.githubusercontent.com/torvalds/linux/6e61dde82e8bfe65e8ebbe43da45e615bc529236/
1 source maps successfully removed
DWARF sembollerinin sorunlarını giderme
Linux/Android dökümlerinde (veya CÜCE sembolleri kullanan diğer hedeflerde) hata ayıklarsanız, yerel değişkenlerin, tür tanımlarının veya işlev tanımlarının neden yanlış olduğunu anlamak için simgelerin ham içeriğine bakmak isteyebilirsiniz. Bunu yapmak için hata ayıklayıcının, DWARF sembollerinin ham içeriğini dökümü için bazı yerleşik uzantı komutları vardır. Ayrıca, sembol iç bilgilerini görüntülemek için readelf ve dumpdwarf gibi Linux yardımcı programlarını kullanın.
readelf komutu
Linux canlı uzaktan işlem hata ayıklamasında oluşturulan örnek DisplayGreeting programı için oluşturulan hata ayıklama derleme kimliğini görüntülemek için Linux komut istemindeki readelf komutunu kullanın. Bu örnekte, aba822dd158b997b09903d4165f3dbfd37f5e5c1 derleme kimliği döndürülür.
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, sembol sürümünü döndürmek için grep ile kullanılabilir.
readelf --debug-dump=info DisplayGreeting | grep -A 2 'Compilation Unit @'
Compilation Unit @ offset 0x0:
Length: 0x285c (32-bit)
Version: 5
dwarfdump
dwarfdump Linux komutu, belirli seçenekler tarafından istenen DWARF bölümlerini yazdırır veya kontrol eder. Birçok seçeneği görüntülemek için dwarfdump -h kullanın.
bob@BOB6:/mnt/c/Users/BOB$ dwarfdump -h
Ubuntu'da dwarfdump kullanma hakkında daha fazla bilgi için bkz dwarfdump.
!diesym
Bu hata ayıklayıcı komutu, belirtilen ifadede (adres, işlev adı vb.) bulunan simge için isteğe bağlı olarak belirtilen özyineleme düzeyine sahip DIE (veya DIE alt ağacı) görüntüler. Verilen bir adreste yer alan sembol (genellikle fonksiyon ama veri vb. de olabilir) için DEİ'yi bulur ve sembollerde dwarfdump veya llvm-dwarfdump çalıştırmaya benzer şekilde DEİ'nin tanılama dökümünü gerçekleştirir.
!diesym [options] <expression>
-r# : N düzeyini özyinelemeli olarak çıkart. Normalde, bu birdir ve sadece DIE'nin kendisi atılır.
<expression> - DIE'yi bulmak için adres bir ifade tarafından verilir. Düz bir onaltılık adres (0x<blah>) veya başka bir şekilde benzersiz bir işlev adı olabilir.
Veri modelinin standart değerlendirmesi tarafından değerlendirilebilir olması gerekir. Model ifadesinin doğrulanması için dx komutunu kullanın. dx komutunu kullanma hakkında daha fazla bilgi için bkz. dx (Debugger Nesne Modeli İfadesini Görüntüle).
0:000> dx DisplayGreeting!GetCppConGreeting
DisplayGreeting!GetCppConGreeting : DisplayGreeting!GetCppConGreeting+0x0 [Type: GetCppConGreeting]
Örnek DisplayGreeting programı için, GetCppConGreeting işlevinin DIE sembol bilgilerini görüntüleyin.
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)
Ek bir DIE simgesi bilgisi düzeyi görüntülemek için -r2 seçeneğini kullanın.
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)
!ölmek
!die , DWARF hata ayıklama bölümünde belirtilen ofset ifadesindeki DIE (veya DIE alt ağacı) için, isteğe bağlı olarak belirlenen bir özyineleme düzeyine sahip görüntüleme yapar.
!die [-r#] [-t] -m <module base expression> <offset expression>
-r# : N düzeyini özyinelemeli olarak çıkart.
-t : DIE, .debug_info içindeki bir derleme birimi yerine .debug_types içinde bir tür birimi içindeyse, -t seçeneğini belirtmeniz gerekir.
Sorguladığınız modülün temel adresini veren bir -m <module base expression> sağlayın.
<offset expression>, DIE ofsetinin boyutudur.
Linux komut isteminde, DIE uzaklığını bulmak için DWARF dosyasının .debug_aranges bölümünü yazdırmak üzere -r ile dwarfdump kullanın.
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
DW_AT_ranges değerini 0x0000000c not edin. Hata ayıklayıcıda, DIE sembol bilgilerini görüntülemek için bu uzaklık değerini ve DisplayGreeting modül adını kullanın.
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
Komut !dieancestry, !die gibi davranır, ancak DIE ağacını içeren derleme veya tür birimine doğru yukarı çıkar, ağaçtan aşağı değil.
!dieancestry [-r#] [-t] -m <module base expression> <offset expression>
-r# : N düzeyini özyinelemeli olarak çıkart.
Sorguladığınız modülün temel adresini veren bir -m <module base expression> sağlayın.
<offset expression>, DIE ofsetinin boyutudur.
Örnek:
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
Örneğin, ebeveynlere veya kardeşlere yönelik bağlantıların, DWARF sembol ağacında daha fazla dolaşıma izin vermek için tıklanabilir olduğunu unutmayın.
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'
...
Tüm çıkışlar gösterilmez.
!dwunwind
!dwunwind PE görüntüleri için .fnent 'e (İşlev verilerini görüntüle) benzer. Verilen ifadeye bağlı olarak bir adres için DWARF geri sarma kurallarını görüntüler. Kullanılabilir olduğunda geri sarma bilgilerini görüntüleyen readelf --unwind komutuna da benzer.
!dwunwind <expression>
Bu örnek, DisplayGreeting programında GetCppConGreeting işlevinin geri sarma kurallarını görüntüler.
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
Bu, yönerge işaretçisi yazmaç için geri sarma yığınını görüntüler.
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
Burada bir program sayacı örneği verilmiştir.
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
Belirli bir modülün DIE ağacını, dwarfdump veya llvm-dwarfdump komutunu çalıştırarak DIE'yi bulmaya benzer şekilde belirli bir özyineleme düzeyinde dökümünü alır.
!dietree [OPTIONS] -m <module base> <offset expression>
-r# : Özyineleme düzeyini belirtin
-t : .debug_info yerine .debug_types dökümü yapın
DIE içeren modül için modül tabanı, -m <expression> seçeneği ile belirtilmelidir.
<offset expression>, DIE ofsetinin boyutudur.
Örnek:
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
Dietree'de ek değerleri görüntülemek için -r2 seçeneğini kullanın.
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'
...
Tüm çıkışlar gösterilmez. Örneğin eşdüzeylere yönelik bağlantıların, CÜCE sembol ağacının daha fazla geçişine izin vermek için tıklanabilir olduğunu unutmayın.
!dielocal
"Name" adlı yerel değişken için DIE'yi bulur ve semboller üzerinde dwarfdump veya llvm-dwarfdump çalıştırmaya benzer bir şekilde DIE'nin tanılama dökümünü gerçekleştirir.
!dielocal [options] <name>
-r# : N düzeyini özyinelemeli olarak çıkart. Normalde, bu birdir ve sadece DIE'nin kendisi atılır.
<name> : "name" adlı yerel değişken.
Örnek:
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)