如何使用GDB提取结构成员的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用GDB提取结构成员的值相关的知识,希望对你有一定的参考价值。

假设我有一个内核结构struct thread_info,我想从使用GDB的thread_info结构中获取preempt_count变量的值。

我可以通过取消引用thread_info来获得以下信息

(gdb) p (struct thread_info *)0x8785A000

{task = 0x70617261, exec_domain = 0x6d657465, flags = 1920139264, tp_value = 4294967295, cpu = 4294967295, preempt_count = -1, addr_limit = {seg = 4294967295}, restart_block = {fn = 0xffffffff, {
      futex = {uaddr = 0xffffffff, val = 4294967295, flags = 4294967295, bitset = 4294967295, time = 18446744073709551615, uaddr2 = 0xffffffff}, nanosleep = {clockid = -1, rmtp = 0xffffffff,
        expires = 18446744073709551615}, poll = {ufds = 0xffffffff, nfds = -1, has_timeout = -1, tv_sec = 4294967295, tv_nsec = 4294967295}}}, regs = 0xffffffff}

现在,我想单独提取preempt_count值。如何使用GDB实现。

答案

我想单独提取preempt_count值

这应该工作:

(gdb) p ((struct thread_info *)0x8785A000)->preempt_count

以上是关于如何使用GDB提取结构成员的值的主要内容,如果未能解决你的问题,请参考以下文章

无法在 GDB 中提取发生 FPE 的值

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

在核心转储文件上使用 gdb 获取变量的值

成员函数的 C++ GDB 断点

如何初始化(或分配)具有特定默认值的结构(抽象数据类型)成员的值