问题标签 [kgdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 没有为用户模块创建调试符号
我想使用 kgdb 调试用户模块。编码 :
生成文件:
我用正确的调试符号(CONFIG_DEBUG_INFO=y)编译了我的内核。但是,当我检查模块中的部分时,所有段的地址仍然为 0x0000000000000000。请帮忙。
linux-kernel - 如何查看使用 kgdb 调试 ARM Linux 模块的完整回溯?
我学习了所有由Free Electrons创建的免费 Linux 培训材料。在上一个实验中,我们学习了使用 kgdb 远程调试可加载模块中的简单崩溃。崩溃是由 memzero 函数调用中的空指针取消引用引起的。
我正在使用 Linux 内核 4.9 和 BeagleBone Black 作为目标,所有这些都是根据实验室的建议进行的,到目前为止我还没有遇到任何问题。我的主机是 Ubuntu xenial,我正在使用 ARM 工具链 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 和 gdb (7.11.1-0ubuntu1~16.04) 调试器的标准包。
gdb 能够从 vmlinux 和包含 bug 的模块(称为 drvbroken.ko)中读取符号表。该模块在其 init 函数中有一个错误,因此当我对其进行安装时它会立即崩溃。
gdb 输出:
无论我使用 CONFIG_ARM_UNWIND(默认值)还是禁用它并使用 CONFIG_FRAME_POINTER(实验室笔记推荐的旧方法)构建内核,结果都是一样的。
我在 kdb 中尝试了相同的过程,在这里我看到了一个很长的回溯,其中包括调用函数。memzero 的调用者是 cdev_init。
kdb 输出:
使用这些信息很容易找出在哪里查找错误,但遗憾的是,无法直接从 kdb 获取行号或列出源代码。假设我可以获得完整的回溯,这在 gdb 中要容易得多。
debugging - FreeBSD 模块调试 - 无法访问地址处的内存
我正在尝试破解/理解 nullfs 内核模块(在 FreeBSD 上),为此,我执行以下操作:
在目标机器上:
kldstat
给出:
在通过充当串行控制台的命名管道连接到目标的本地计算机上(我正在使用虚拟机):
从上面的“nm”和“kldstat”的输出可以看出,地址确实是正确的。
我什至尝试在上述地址设置“硬件断点”:
然而,这一次虽然断点已注册,但它永远不会被插入。在 Linux 上搜索此错误时,似乎可以通过关闭 CONFIG_DEBUG_RODATA 作为内核配置的一部分来解决此问题(根据此链接,这似乎是某种保护机制,可检测内核的文本部分何时由于某种原因被覆盖)。这有助于设置否则不会设置的软件断点。我不知道这是否也是这里的原因。
其次,我想知道虽然目标上的实际地址在上面0xffffffff00000000
,但调试器只报告低 8 位。是因为它被理解/假设了吗?
渴望听到你们的消息
linux-kernel - gdb 没有正确地在地址处放置断点
我正在使用 kgdb 模块和 gdb 调试 linux 内核。当试图在某个地址设置断点时,gdb 将它设置在另一个错误的地址。
有谁知道为什么?
linux - Linux - 从内核空间中的用户空间的线程访问 mmap()ed 内存
将此内存映射到我的用户空间线程中:
线程正在运行(无限循环)
在内核中设置断点并尝试访问它:
但它无法访问。
如何从内核空间访问 0xb7fd0000?会在什么地址下?
甚至可能吗?
谢谢,
linux-kernel - 在 arm 目标上使用 kgdb/gdb 调试内核?
我从我vmlinux.uimg
的vmlinux
朋友那里得到了。这vmlinux
是使用 Linux 版本 4.14.10 构建的。我有两台机器:
- 目标(arm 32 位架构)和
- 主机(x86 架构)
两个系统都用线连接,端口号分别是/dev/ttySAC3
和/dev/ttyUSB0
。vmlinux.uimg
通过从 sd 卡读取图像文件来启动目标。我想vmlinux
从我的主机调试这个。
我遵循的步骤是:
- 在主机中启动 minicom。
类型
我收到“KGDB:注册的 I/O 驱动程序 kgdboc”。
类型
我收到“sysrq DEBUG 并进入 KGDB”。
- 关闭迷你通。
- 通过主机中的终端转到 vmlinux 文件夹。
类型
[注意:我使用的这个 gdb 是 arm 的 7.10 版本]
在 GDB 类型中
它给我一个消息
/li>在 GDB 类型中
我收到一条消息
/li>在 GDB 类型中
这给了我一个信息
然后什么都不做。。
问题:
GDB
continue
没有按预期工作。我期待最后一步(9)继续目标重启并达到断点而不是崩溃。GDB
step
并next
没有按预期工作。单步执行直到退出,sysrq_dbg_op()
其中没有行号信息。“警告:无效的远程回复”。GDB“运行”也不起作用。它显示一条消息“远程目标不支持运行”
我如何在我放置断点的目标上调用一个模块,因为我不能同时使用 minicom 和 gdb。
冻结内核后我应该遵循的所有步骤。
这个过程有什么问题?
linux - 在 kgdb 中,我无法设置断点
我正在使用 kgdb 来调试内核。
我正在为访客使用 qemu 2.11.0 和 ubuntu 16.04.3 服务器版本。
我安装了内核 4.16.0-rc6(主线)并使用带有 kgdb 选项(kgdbwait kgdboc=ttyS0,115200)的内核启动来宾操作系统。
gdb 可以成功连接到客户机。
但是,设置断点失败并显示以下错误消息。
无法访问地址 0xffffffff8124b170 的内存
其实我以前是用kgdb调试内核的,内核版本是4.8以下。
内核是原始格式的虚拟磁盘。
我通过将原始格式虚拟磁盘挂载到来宾来在来宾中编译并安装此内核,并通过将原始格式虚拟磁盘挂载到主机来使用 gdb 打开 vmlinux 文件。
有什么过错吗?
linux - 为什么调试vmlinux时kgdb不显示函数符号?
我已经在启用以下内核选项的情况下编译了我的内核。这应该足够了。
我想在内核空间下实现一个 tcp 套接字服务器。但是,当我调试内核时,gdb 似乎无法识别函数符号。显示问号。
当前内核版本是 4.9.82。
linux - KGDB 没有将地址与符号相关联
我正在尝试调试 Linux 内核,特别是蓝牙内核模块。我想单步执行代码net/bluetooth/l2cap_core.c
- 主机:linux mint 18.3(在VM中运行)。
- 目标机器:树莓派 3b+
我使用交叉编译工具在主机上编译带有调试符号的内核。在 pi 上加载内核,它启动得很好,我可以看到我的目标l2cap_parse_conf_rsp
符号/proc/kallsyms
我在 KDB 中设置断点。
我发送一个蓝牙数据包,并触发断点。一旦我们进入 KDB shell,我切换到 KGDB 模式。
在我编译内核的主机上,我运行gdb-multiarch ./vmlinux
. 我使用加载符号地址lx-symbols
。符号似乎已正确加载:
我什至可以看到源代码:
但是,当我单步执行代码时,gdb 无法提取该信息。例如,当我打印回溯时,当前函数显示为??
我错过了什么?如何告诉 GDB 地址0xbf2ae7c4
对应于符号l2cap_parse_conf_rsp
?