From: Chen-Yu Yeh <chenyou910331@gmail.com>
To: Alex Shi <alexs@kernel.org>, Jonathan Corbet <corbet@lwn.net>
Cc: Weijie Yuan <wy@wyuan.org>, Dongliang Mu <dzm91@hust.edu.cn>,
Yanteng Si <si.yanteng@linux.dev>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
Chen-Yu Yeh <chenyou910331@gmail.com>
Subject: [PATCH 10/25] docs/zh_TW: process: sync gdb-kernel-debugging.rst with the English original
Date: Fri, 6 Nov 2026 19:31:25 +0800 [thread overview]
Message-ID: <20261106113142.706783-11-chenyou910331@gmail.com> (raw)
In-Reply-To: <20261106113142.706783-1-chenyou910331@gmail.com>
The translation carries "update to commit d5af79c05e93 ("Documentation:
move dev-tools debugging files to process/debugging/")", but as
commit e07f694cbd09 ("docs/zh_TW: move gdb-kernel-debugging to
process/debugging/") already noted, that marker was the oldest baseline
checktransupdate.py could see after the move, not the version the text
follows. A section-by-section comparison against the current English
text shows the translation includes the lx_per_cpu examples from
commit 09e1d93a421f ("scripts/gdb: update documentation for
lx_per_cpu"), but lacks the "make scripts_gdb" step from
commit 6b219431037b ("docs/scripts/gdb: add necessary make scripts_gdb
step") and the "Debugging GDB scripts" section from
commit 7f7f468548ce ("Documentation: Provide hints on how to debug
Python GDB scripts"). Bring it in line with the full current original:
- add the "Build the gdb scripts" step and the "Debugging GDB scripts"
section
- drop text the original does not have: the "(kernel source build)"
note on the cd step and the "(command not found)" note on the
auto-load warning, and a duplicated word in the breakpoint step
- translate "convenience functions" and "a snapshot of the initial
version" as written instead of as "debugging helpers" and "some
examples of the initial version"
- replace the mainland terms left over from the zh_CN conversion
(調試, 內核, 模塊, 加載, 接口, 硬件, 信息, 文檔, 命令行, 函數, 字段,
斷點, 鏡像, 控制檯, ...) with Taiwanese usage, and use 為, 啟 and 才
- add the SPDX-License-Identifier line carried by the other zh_TW
translations in process/
Now that the file is in sync, drop the unmaintained-zh_TW.rst notice
that commit 6561dd301873 ("docs/zh_TW: add a notice for translations
not kept in sync") added until it was updated.
update to commit 7f7f468548ce ("Documentation: Provide hints on how to
debug Python GDB scripts")
Signed-off-by: Chen-Yu Yeh <chenyou910331@gmail.com>
---
.../debugging/gdb-kernel-debugging.rst | 104 ++++++++++--------
1 file changed, 60 insertions(+), 44 deletions(-)
diff --git a/Documentation/translations/zh_TW/process/debugging/gdb-kernel-debugging.rst b/Documentation/translations/zh_TW/process/debugging/gdb-kernel-debugging.rst
index 45f178c0bf59..81e6433f16e4 100644
--- a/Documentation/translations/zh_TW/process/debugging/gdb-kernel-debugging.rst
+++ b/Documentation/translations/zh_TW/process/debugging/gdb-kernel-debugging.rst
@@ -1,67 +1,75 @@
+.. SPDX-License-Identifier: GPL-2.0
+
.. highlight:: none
.. include:: ../../disclaimer-zh_TW.rst
-.. include:: ../../unmaintained-zh_TW.rst
:Original: Documentation/process/debugging/gdb-kernel-debugging.rst
-通過gdb調試內核和模塊
-=====================
+透過gdb對核心與模組除錯
+=======================
+
+核心除錯器kgdb、QEMU等hypervisor,或基於JTAG的硬體介面,都能在執行期間使用
+gdb對Linux核心及其模組除錯。Gdb提供了強大的python腳本介面,核心也提供了一組
+輔助腳本,可以簡化典型的核心除錯步驟。本文是一份簡短的教學,說明如何啟用與
+使用這些腳本。本文以QEMU/KVM虛擬機器作為目標,但其中的範例也同樣適用於其他
+gdb stub。
-Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口,支持在運行時使用gdb
-調試Linux內核及其模塊。Gdb提供了一個強大的python腳本接口,內核也提供了一套
-輔助腳本以簡化典型的內核調試步驟。本文檔爲如何啓用和使用這些腳本提供了一個簡要的教程。
-此教程基於QEMU/KVM虛擬機,但文中示例也適用於其他gdb stub。
+需求
+----
-環境配置要求
-------------
+- gdb 7.2+(建議:7.4+),並啟用python支援(各發行版通常都已啟用)
-- gdb 7.2+ (推薦版本: 7.4+) 且開啓python支持 (通常發行版上都已支持)
-設置
+設定
----
-- 創建一個QEMU/KVM的linux虛擬機(詳情請參考 www.linux-kvm.org 和 www.qemu.org )。
- 對於交叉開發,https://landley.net/aboriginal/bin 提供了一些鏡像和工具鏈,
- 可以幫助搭建交叉開發環境。
+- 為QEMU/KVM建立一台Linux虛擬機器(詳情請參考www.linux-kvm.org與
+ www.qemu.org)。若要進行交叉開發,https://landley.net/aboriginal/bin 提供了
+ 一批機器映像檔與工具鏈,可以作為起點。
+
+- 建置核心時啟用CONFIG_GDB_SCRIPTS,但保持CONFIG_DEBUG_INFO_REDUCED關閉。
+ 如果你的架構支援CONFIG_FRAME_POINTER,請保持啟用。
-- 編譯內核時開啓CONFIG_GDB_SCRIPTS,關閉CONFIG_DEBUG_INFO_REDUCED。
- 如果架構支持CONFIG_FRAME_POINTER,請保持開啓。
+- 在guest上安裝該核心,必要時在核心命令列加上“nokaslr”以關閉KASLR。
+ 另外,QEMU也可以透過-kernel、-append、-initrd這些命令列選項直接啟動核心。
+ 這通常只在你不依賴模組時才有用。關於此模式的詳細資訊,請參閱QEMU文件。
+ 在這種情況下,如果架構支援KASLR,應該在停用CONFIG_RANDOMIZE_BASE的情況下
+ 建置核心。
-- 在guest環境上安裝該內核。如有必要,通過在內核command line中添加“nokaslr”來關閉KASLR。
- 此外,QEMU允許通過-kernel、-append、-initrd這些命令行選項直接啓動內核。
- 但這通常僅在不依賴內核模塊時纔有效。有關此模式的更多詳細信息,請參閱QEMU文檔。
- 在這種情況下,如果架構支持KASLR,應該在禁用CONFIG_RANDOMIZE_BASE的情況下構建內核。
+- 建置gdb腳本(v5.1以上的核心需要此步驟)::
-- 啓用QEMU/KVM的gdb stub,可以通過如下方式實現
+ make scripts_gdb
- - 在VM啓動時,通過在QEMU命令行中添加“-s”參數
+- 啟用QEMU/KVM的gdb stub,可以
+
+ - 在VM啟動時,於QEMU命令列加上“-s”
或
- - 在運行時通過從QEMU監視控制檯發送“gdbserver”
+ - 在執行期間,從QEMU monitor主控台下達“gdbserver”
-- 切換到/path/to/linux-build(內核源碼編譯)目錄
+- cd /path/to/linux-build
-- 啓動gdb:gdb vmlinux
+- 啟動gdb:gdb vmlinux
- 注意:某些發行版可能會將gdb腳本的自動加載限制在已知的安全目錄中。
- 如果gdb報告拒絕加載vmlinux-gdb.py(相關命令找不到),請將::
+ 注意:某些發行版可能會將gdb腳本的自動載入限制在已知安全的目錄。
+ 如果gdb回報拒絕載入vmlinux-gdb.py,請將::
add-auto-load-safe-path /path/to/linux-build
- 添加到~/.gdbinit。更多詳細信息,請參閱gdb幫助信息。
+ 加入~/.gdbinit。詳情請參閱gdb的說明。
-- 連接到已啓動的guest環境::
+- 連線到已開機的guest::
(gdb) target remote :1234
-使用Linux提供的gdb腳本的示例
-----------------------------
+使用Linux提供的gdb輔助工具的範例
+--------------------------------
-- 加載模塊(以及主內核)符號::
+- 載入模組(以及主核心)的符號::
(gdb) lx-symbols
loading vmlinux
@@ -74,18 +82,18 @@ Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口
...
loading @0xffffffffa0000000: /home/user/linux/build/drivers/ata/ata_generic.ko
-- 對一些尚未加載的模塊中的函數函數設置斷點,例如::
+- 對某個尚未載入的模組函式設定中斷點,例如::
(gdb) b btrfs_init_sysfs
Function "btrfs_init_sysfs" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (btrfs_init_sysfs) pending.
-- 繼續執行::
+- 讓目標繼續執行::
(gdb) c
-- 加載模塊並且能觀察到正在加載的符號以及斷點命中::
+- 在目標上載入模組,觀察符號的載入以及中斷點的觸發::
loading @0xffffffffa0034000: /home/user/linux/build/lib/libcrc32c.ko
loading @0xffffffffa0050000: /home/user/linux/build/lib/lzo/lzo_compress.ko
@@ -95,7 +103,7 @@ Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口
Breakpoint 1, btrfs_init_sysfs () at /home/user/linux/fs/btrfs/sysfs.c:36
36 btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj);
-- 查看內核的日誌緩衝區::
+- 傾印目標核心的日誌緩衝區::
(gdb) lx-dmesg
[ 0.000000] Initializing cgroup subsys cpuset
@@ -107,21 +115,21 @@ Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口
[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
....
-- 查看當前task struct結構體的字段(僅x86和arm64支持)::
+- 檢視目前task struct的欄位(僅支援x86與arm64)::
(gdb) p $lx_current().pid
$1 = 4998
(gdb) p $lx_current().comm
$2 = "modprobe\000\000\000\000\000\000\000"
-- 對當前或指定的CPU使用per-cpu函數::
+- 針對目前或指定的CPU使用per-cpu函式::
(gdb) p $lx_per_cpu(runqueues).nr_running
$3 = 1
(gdb) p $lx_per_cpu(runqueues, 2).nr_running
$4 = 0
-- 使用container_of查看更多hrtimers信息::
+- 使用container_of輔助函式深入檢視hrtimers::
(gdb) set $leftmost = $lx_per_cpu(hrtimer_bases).clock_base[0].active.rb_root.rb_leftmost
(gdb) p *$container_of($leftmost, "struct hrtimer", "node")
@@ -144,10 +152,11 @@ Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口
}
-命令和輔助調試功能列表
-----------------------
+命令與函式列表
+--------------
-命令和輔助調試功能可能會隨着時間的推移而改進,此文顯示的是初始版本的部分示例::
+命令與便利函式(convenience function)的數量可能會隨時間演進,以下只是初始
+版本的快照::
(gdb) apropos lx
function lx_current -- Return current task
@@ -159,6 +168,13 @@ Kgdb內核調試器、QEMU等虛擬機管理程序或基於JTAG的硬件接口
lx-lsmod -- List currently loaded modules
lx-symbols -- (Re-)load symbols of Linux kernel and currently loaded modules
-可以通過“help <command-name>”或“help function <function-name>”命令
-獲取指定命令或指定調試功能的更多詳細信息。
+命令的詳細說明可以透過“help <command-name>”取得,便利函式的詳細說明則可以
+透過“help function <function-name>”取得。
+
+除錯GDB腳本
+-----------
+
+GDB並未啟用完整的Python回溯(backtrace),這可能讓除錯GDB腳本變得比必要的
+更困難。以下設定可以印出python環境的完整回溯::
+ (gdb) set python print-stack full
--
2.43.0
next prev parent reply other threads:[~2026-11-06 11:32 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 11:31 [PATCH 00/25] docs/zh_TW: process: resync translations with the English originals Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 01/25] docs/zh_TW: process: sync 1.Intro.rst with the English original Chen-Yu Yeh
2026-11-11 13:08 ` Weijie Yuan
2026-11-06 11:31 ` [PATCH 02/25] docs/zh_TW: process: sync 2.Process.rst " Chen-Yu Yeh
2026-11-11 14:32 ` Weijie Yuan
2026-11-06 11:31 ` [PATCH 03/25] docs/zh_TW: process: sync 4.Coding.rst " Chen-Yu Yeh
2026-11-12 3:25 ` Weijie Yuan
2026-11-12 5:36 ` Weijie Yuan
2026-11-06 11:31 ` [PATCH 04/25] docs/zh_TW: process: sync 5.Posting.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 05/25] docs/zh_TW: process: sync 6.Followthrough.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 06/25] docs/zh_TW: process: sync 7.AdvancedTopics.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 07/25] docs/zh_TW: process: sync 8.Conclusion.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 08/25] docs/zh_TW: process: sync code-of-conduct-interpretation.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 09/25] docs/zh_TW: process: sync code-of-conduct.rst " Chen-Yu Yeh
2026-11-06 11:31 ` Chen-Yu Yeh [this message]
2026-11-06 11:31 ` [PATCH 11/25] docs/zh_TW: process: sync development-process.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 12/25] docs/zh_TW: process: sync email-clients.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 13/25] docs/zh_TW: process: sync kernel-driver-statement.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 14/25] docs/zh_TW: process: sync kernel-enforcement-statement.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 15/25] docs/zh_TW: process: sync management-style.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 16/25] docs/zh_TW: process: sync security-bugs.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 17/25] docs/zh_TW: process: sync volatile-considered-harmful.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 18/25] docs/zh_TW: process: sync 3.Early-stage.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 19/25] docs/zh_TW: process: sync coding-style.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 20/25] docs/zh_TW: process: sync embargoed-hardware-issues.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 21/25] docs/zh_TW: process: sync howto.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 22/25] docs/zh_TW: process: sync license-rules.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 23/25] docs/zh_TW: process: sync stable-api-nonsense.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 24/25] docs/zh_TW: process: sync submit-checklist.rst " Chen-Yu Yeh
2026-11-06 11:31 ` [PATCH 25/25] docs/zh_TW: process: sync submitting-patches.rst " Chen-Yu Yeh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261106113142.706783-11-chenyou910331@gmail.com \
--to=chenyou910331@gmail.com \
--cc=alexs@kernel.org \
--cc=corbet@lwn.net \
--cc=dzm91@hust.edu.cn \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=si.yanteng@linux.dev \
--cc=wy@wyuan.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.