gdb kernel debug的进程断点

简介: gdb调试kernel的时候, 如果设置通用函数断点, 比如vfs_read, 就会遇到一堆撞到断点的地方, 比如tty输入一个字符, 就是vfs_read, 没办法调试具体的某一个进程 一种办法就是条件断点, 其实不是很好用, 比如用pid, 但是有时候这个进程还没启动, 比如task的comm来判定, 但是kernel中是不支持strcmp来判断字符串是否相等, 因为需要跑函数 g

gdb调试kernel的时候, 如果设置通用函数断点, 比如vfs_read, 就会遇到一堆撞到断点的地方, 比如tty输入一个字符, 就是vfs_read, 没办法调试具体的某一个进程

一种办法就是条件断点, 其实不是很好用, 比如用pid, 但是有时候这个进程还没启动, 比如task的comm来判定, 但是kernel中是不支持strcmp来判断字符串是否相等, 因为需要跑函数

gdb 7.5对此问题做了增强, gdb自己去比较字符串, 而不需要机器去跑代码

https://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Funs.html#Convenience-Funs

b do_fault if $_streq($lx_current()->comm, "a.out")

还可以对调用者来做条件断点, 比如a->c, b->c, 断点只停在b调用c的地方

$_caller_is(name[, number_of_frames])

    Returns one if the calling function’s name is equal to name. Otherwise it returns zero.

    If the optional argument number_of_frames is provided, it is the number of frames up in the stack to look. The default is 1.

    Example:

    (gdb) backtrace
    #0  bottom_func ()
        at testsuite/gdb.python/py-caller-is.c:21
    #1  0x00000000004005a0 in middle_func ()
        at testsuite/gdb.python/py-caller-is.c:27
    #2  0x00000000004005ab in top_func ()
        at testsuite/gdb.python/py-caller-is.c:33
    #3  0x00000000004005b6 in main ()
        at testsuite/gdb.python/py-caller-is.c:39
    (gdb) print $_caller_is ("middle_func")
    $1 = 1
    (gdb) print $_caller_is ("top_func", 2)
    $1 = 1

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
小程序 开发工具 git
119.【Uniapp】(二)
119.【Uniapp】
309 0
|
弹性计算 关系型数据库 数据库
搭建PostgreSQL主从架构
PostgreSQL是一个关系型数据库管理系统(RDBMS),支持NoSQL数据类型(JSON/XML/hstore)。本教程介绍如何在两台CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构。
|
安全 网络安全 数据安全/隐私保护
IP申请SSL证书的条件和方法
IP申请SSL证书的条件和方法 互联网信息安全时代,网站部署SSL证书能实现HTTPS加密。通常SSL证书是颁发给域名的,但很多企事业单位需要IP地址实现HTTPS加密,那么IP能申请SSL证书吗?小编了解到数安时代GDCA能为IP地址颁发SSL证书。
9858 0
|
5月前
|
缓存 前端开发
如何使用 HOC 来增强组件的功能?
如何使用 HOC 来增强组件的功能?
275 74
|
C++ Windows
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。
|
10月前
|
前端开发
「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。
244 20
「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
|
11月前
|
Java API 调度
Java 线程的生命周期
在JDK 1.5之前,线程的生命周期包括五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。JDK 1.5及之后增加了三种阻塞状态,共六种状态:新建、可运行、终止、锁阻塞、计时等待和无限等待。这些状态描述了线程在操作系统和JVM中的不同阶段。
305 4
Java 线程的生命周期
|
JSON Java 开发工具
jackson学习之九:springboot整合(配置文件)
熟悉和实践在springboot应用中通过application.yml对jackson进行全局设置
262 4
jackson学习之九:springboot整合(配置文件)
|
9月前
|
人工智能 开发者 C++
通义灵码流式补全性能优化场景DEMO
通义灵码流式补全性能优化DEMO展示了在处理大段代码时的高效展示方案。通过在VS Code中实现流式补全,模型可在500毫秒内开始展示代码,首包返回后逐行流式输出,大大减少了开发者的等待时间,提升了coding流畅度,让AI更好地适应开发者需求。
136 0
|
算法 量子技术 vr&ar
【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现
本文详细介绍了2023年第十三届MathorCup高校数学建模挑战赛A题的解题过程,包括量子计算机在信用评分卡组合优化中的应用,提供了详细的建模方案、QUBO模型的构建方法以及相应的代码实现。
354 3
【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现