Linux调试之(二)gdb+vmlinux

2023-05-16

文章目录

  • Linux调试之(二)gdb+vmlinux
    • 【1】定位arm-eabi-gdb 和 vmlinux
    • 【2】gdb加载内核符号表
        • 1.查看内核符号表
        • 2.执行arm-eabi-gdb vmlinux
        • 3.输入 list*(函数名+函数内偏移) 即可查看特定位置的代码,定位问题。
    • 【3】gdb调试基本命令

Linux调试之(二)gdb+vmlinux

运行linux内核,难免会遇到oops崩溃问题,如类似空指针crash,系统crash时会打印一些当时的栈信息,我们可以通过这些信息结合vmlinux来调试具体在哪个函数上出现了问题。gdb可以运行代码进行调试,可以看到更多的panic附近的信息,但对于偶发的panic就不起作用了


本平台为RK3399:

【1】定位arm-eabi-gdb 和 vmlinux

  find ./ -type f -name '*' | xargs grep  'arm-eabi-gdb'
  find ./ -type f -name '*' | xargs grep  'vmlinux'

【2】gdb加载内核符号表

1.查看内核符号表

Vmlinux是一个elf内核符号表,编译进内核的函数列表之类的可以从里面提取出来
 readelf  -a vmlinux

访问elf文件所在目录,执行“readelf -a 文件名”即可查看elf文件的内容。
-a选项表示显示所有信息。

2.执行arm-eabi-gdb vmlinux

记得需在内核的.config里面要打开 DEBUG_INFO和DEBUG_VM

./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-gdb kernel/vmlinux

3.输入 list*(函数名+函数内偏移) 即可查看特定位置的代码,定位问题。

lst*dwc3_send_gadget_ep_cmd+0x108/0x3a8
[09:33:ed+0x24/0x28

(gdb) l * qrd7627a_add_io_devices+0x100
 0xc07cd05c is in qrd7627a_add_io_devices (/home/yejialong/GH700C/kernel/arch/arm/mach-msm/msm8x25/goso-msm7627a-io.c:1851).
 1846            } else if (machine_is_msm8625q_skud() || machine_is_msm8625q_evbd()) {
 1847        #ifndef CONFIG_CALA02
 1848             platform_device_register(&pmic_mpp_leds_pdev_skud);
 1849        #endif
 1850            /* enable the skud flash and torch by gpio leds driver */
 1851             platform_device_register(&gpio_flash_skud);
 1852        } else if (machine_is_msm8625q_skue()){
1853            /* enable the skue flashlight by gpio leds driver */
1854             platform_device_register(&gpio_flash_skue);
1855        }

【3】gdb调试基本命令

https://www.cnblogs.com/yjf512/p/9204520.html
启动项目并断点
start
打临时断点
tb
打断点
b
列出代码
l
单步运行
n
进入函数调试
step
跳出函数
finish
继续运行
c
查看断点信息
info b
去掉某个断点
delete
fork的时候进入子进程
set follow-fork-mode child
fork的时候进入父进程
set follow-fork-mode parent
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux调试之(二)gdb+vmlinux 的相关文章

  • 在 Ubuntu 中找不到 X11/Xlib.h

    我试图在 Linux 上使用 open gl 编写一个相当简单的程序 但在编译时它说 编译拇指 egl 我对 GL 完全陌生 不知道出了什么问题 快速搜索使用 apt search Xlib h 打开 libx11 dev 包 但纯 Ope
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • linux下写入后崩溃

    如果我使用 write 将一些数据写入磁盘上的文件会发生什么 但我的应用程序在刷新之前崩溃了 如果没有系统故障 是否可以保证我的数据最终会刷新到磁盘 如果您正在使用write 并不是fwrite or std ostream write 那
  • 在 Linux 上访问 main 之外的主要参数

    是否可以访问参数main在外面main 即在共享库构造函数中 在 Linux 上除了通过解析之外 proc self cmdline 您可以通过将构造函数放入 init array部分 功能在 init array 不像 init 使用相同
  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 未找到 Gem 命令

    我已经在 Ubuntu 10 10 32 位上安装了 gem apt get install gem y 但当我尝试跑步时 gem install something gem 我收到未找到命令的错误 bash gem command not
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 在 Linux 上,在 Eclipse CDT 中使用 gdb 调试 C++ 应用程序,如何向 stdin 输入内容?

    在 Linux 上 我尝试在 Eclipse CDT 中使用 gdb 调试 C 应用程序 例如应用程序applic exe接受一些命令行参数arg1 and arg2它期望一些数据stdin 比如说 取自文件input txt 通常 要在控
  • Bash - 比较 2 个文件列表及其 md5 校验和

    我有 2 个列表 其中包含带有 md5sum 检查的文件 即使文件相同 列表也具有不同的路径 我想检查每个文件的 md5 和 我们正在讨论数千个文件 这就是为什么我需要脚本来仅显示差异 第一个列表是普通列表 第二个列表是文件的当前状态 我想
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec

随机推荐