~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/dev-tools/gdb-kernel-debugging.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/translations/zh_CN/dev-tools/gdb-kernel-debugging.rst (Version linux-6.12-rc7) and /Documentation/translations/zh_CN/dev-tools/gdb-kernel-debugging.rst (Version linux-4.14.336)


  1 .. highlight:: none                               
  2                                                   
  3 .. include:: ../disclaimer-zh_CN.rst              
  4                                                   
  5 :Original: Documentation/dev-tools/gdb-kernel-    
  6 :Translator: 高超 gao chao <gaochao49@huawei.    
  7                                                   
  8 通过gdb调试内核和模块                    
  9 =====================                             
 10                                                   
 11 Kgdb内核调试器、QEMU等虚拟机管理    
 12 调试Linux内核及其模块。Gdb提供了    
 13 辅助脚本以简化典型的内核调试步    
 14 此教程基于QEMU/KVM虚拟机,但文中    
 15                                                   
 16                                                   
 17 环境配置要求                                
 18 ------------                                      
 19                                                   
 20 - gdb 7.2+ (推荐版本: 7.4+) 且开启pytho    
 21                                                   
 22 设置                                            
 23 ----                                              
 24                                                   
 25 - 创建一个QEMU/KVM的linux虚拟机(详    
 26   对于交叉开发,https://landley.net/abo    
 27   可以帮助搭建交叉开发环境。         
 28                                                   
 29 - 编译内核时开启CONFIG_GDB_SCRIPTS,    
 30   如果架构支持CONFIG_FRAME_POINTER,请    
 31                                                   
 32 - 在guest环境上安装该内核。如有必    
 33   此外,QEMU允许通过-kernel、-append    
 34   但这通常仅在不依赖内核模块时    
 35   在这种情况下,如果架构支持KASLR    
 36                                                   
 37 - 构建gdb脚本(适用于内核v5.1版本    
 38                                                   
 39     make scripts_gdb                              
 40                                                   
 41 - 启用QEMU/KVM的gdb stub,可以通过如    
 42                                                   
 43     - 在VM启动时,通过在QEMU命令行    
 44                                                   
 45   
 46                                                   
 47     - 在运行时通过从QEMU监视控制台    
 48                                                   
 49 - 切换到/path/to/linux-build(内核源码    
 50                                                   
 51 - 启动gdb:gdb vmlinux                         
 52                                                   
 53   注意:某些发行版可能会将gdb脚    
 54   如果gdb报告拒绝加载vmlinux-gdb.py(    
 55                                                   
 56     add-auto-load-safe-path /path/to/linux-bui    
 57                                                   
 58   添加到~/.gdbinit。更多详细信息,    
 59                                                   
 60 - 连接到已启动的guest环境::              
 61                                                   
 62     (gdb) target remote :1234                     
 63                                                   
 64                                                   
 65 使用Linux提供的gdb脚本的示例            
 66 ----------------------------                      
 67                                                   
 68 - 加载模块(以及主内核)符号::       
 69                                                   
 70     (gdb) lx-symbols                              
 71     loading vmlinux                               
 72     scanning for modules in /home/user/linux/b    
 73     loading @0xffffffffa0020000: /home/user/li    
 74     loading @0xffffffffa0016000: /home/user/li    
 75     loading @0xffffffffa0002000: /home/user/li    
 76     loading @0xffffffffa00ca000: /home/user/li    
 77     loading @0xffffffffa003c000: /home/user/li    
 78     ...                                           
 79     loading @0xffffffffa0000000: /home/user/li    
 80                                                   
 81 - 对一些尚未加载的模块中的函数    
 82                                                   
 83     (gdb) b btrfs_init_sysfs                      
 84     Function "btrfs_init_sysfs" not defined.      
 85     Make breakpoint pending on future shared l    
 86     Breakpoint 1 (btrfs_init_sysfs) pending.      
 87                                                   
 88 - 继续执行::                                  
 89                                                   
 90     (gdb) c                                       
 91                                                   
 92 - 加载模块并且能观察到正在加载    
 93                                                   
 94     loading @0xffffffffa0034000: /home/user/li    
 95     loading @0xffffffffa0050000: /home/user/li    
 96     loading @0xffffffffa006e000: /home/user/li    
 97     loading @0xffffffffa01b1000: /home/user/li    
 98                                                   
 99     Breakpoint 1, btrfs_init_sysfs () at /home    
100     36              btrfs_kset = kset_create_a    
101                                                   
102 - 查看内核的日志缓冲区::                
103                                                   
104     (gdb) lx-dmesg                                
105     [     0.000000] Initializing cgroup subsys    
106     [     0.000000] Initializing cgroup subsys    
107     [     0.000000] Linux version 3.8.0-rc4-db    
108     [     0.000000] Command line: root=/dev/sd    
109     [     0.000000] e820: BIOS-provided physic    
110     [     0.000000] BIOS-e820: [mem 0x00000000    
111     [     0.000000] BIOS-e820: [mem 0x00000000    
112     ....                                          
113                                                   
114 - 查看当前task struct结构体的字段(    
115                                                   
116     (gdb) p $lx_current().pid                     
117     $1 = 4998                                     
118     (gdb) p $lx_current().comm                    
119     $2 = "modprobe\000\000\000\000\000\000\000    
120                                                   
121 - 对当前或指定的CPU使用per-cpu函数:    
122                                                   
123     (gdb) p $lx_per_cpu("runqueues").nr_runnin    
124     $3 = 1                                        
125     (gdb) p $lx_per_cpu("runqueues", 2).nr_run    
126     $4 = 0                                        
127                                                   
128 - 使用container_of查看更多hrtimers信息    
129                                                   
130     (gdb) set $next = $lx_per_cpu("hrtimer_bas    
131     (gdb) p *$container_of($next, "struct hrti    
132     $5 = {                                        
133       node = {                                    
134         node = {                                  
135           __rb_parent_color = 1844661213335525    
136           rb_right = 0x0 <irq_stack_union>,       
137           rb_left = 0x0 <irq_stack_union>         
138         },                                        
139         expires = {                               
140           tv64 = 1835268000000                    
141         }                                         
142       },                                          
143       _softexpires = {                            
144         tv64 = 1835268000000                      
145       },                                          
146       function = 0xffffffff81078232 <tick_sche    
147       base = 0xffff88003fd0d6f0,                  
148       state = 1,                                  
149       start_pid = 0,                              
150       start_site = 0xffffffff81055c1f <hrtimer    
151       start_comm = "swapper/2\000\000\000\000\    
152     }                                             
153                                                   
154                                                   
155 命令和辅助调试功能列表                 
156 ----------------------                            
157                                                   
158 命令和辅助调试功能可能会随着时    
159                                                   
160  (gdb) apropos lx                                 
161  function lx_current -- Return current task       
162  function lx_module -- Find module by name and    
163  function lx_per_cpu -- Return per-cpu variabl    
164  function lx_task_by_pid -- Find Linux task by    
165  function lx_thread_info -- Calculate Linux th    
166  lx-dmesg -- Print Linux kernel log buffer        
167  lx-lsmod -- List currently loaded modules        
168  lx-symbols -- (Re-)load symbols of Linux kern    
169                                                   
170 可以通过“help <command-name>”或“hel    
171 获取指定命令或指定调试功能的更    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php