Kernel 内核 BUG_ON()和WARN_ON()

news2024/9/23 23:27:10

WARN_ON()

  • DEBUG_ON() 不是一个标准的 Linux 内核宏,它可能是特定内核版本或者特定内核配置中的一个宏,或者在某些内核代码中自定义的宏。
  • 一般来说,如果存在 DEBUG_ON(),它可能被用作一个调试开关,用于在调试版本中启用某些调试代码或打印调试信息。
  • DEBUG_ON() 通常不会像 BUG_ON() 那样触发内核崩溃,而是用于控制调试信息的输出。

在Kernel中追加 BUG_ON() 可以查看内核栈调用信息

例如 代码中追加如下:

 输出串口log如下:

GPT 解析结果:

这个日志包含了几个关键的信息,可以帮助分析问题:

  1. 服务启动失败

    • [ T1710] servicemanager: Tried to start aidl service SurfaceFlingerAIDL as a lazy service, but was unable to.
    • 这表明尝试作为延迟服务启动 SurfaceFlingerAIDL 时失败了。这通常发生在服务未安装或者服务配置错误的情况下。
  2. 内核警告

    • [ T1711] WARNING: CPU: 2 PID: 1711 at drivers/net/virtio_net.c:1738 virtnet_open+0x2c/0x280 [virtio_net]
    • 这是一个来自 CPU 核心2的警告,进程ID为1711,位于 drivers/net/virtio_net.c 文件的1738行。这表明在尝试打开一个网络设备时遇到了问题。
  3. 模块列表

    • 日志中列出了许多已加载的模块,例如 qca6490cnss2qrtr_mhi 等,这些模块可能与当前的警告或错误有关。
  4. 系统信息

    • [ T1711] CPU: 2 PID: 1711 Comm: ifconfig Tainted: G O ...
    • 这显示了触发警告的进程是 ifconfig,PID为1711,运行在CPU核心2上。Tainted: G O 表示内核被标记为“污染”,这通常意味着内核或模块是第三方修改过的,或者某些关键组件(如安全启动)没有按预期工作。
  5. 硬件和内核信息

    • [ T1711] Hardware name: Qualcomm Technologies, Inc. Lemans Single LA Guest Virtual Machine (DT)
    • 这表明日志来自一个名为“Lemans”的高通硬件设备,可能是一个虚拟机。
  6. 调用栈

    • 日志的最后部分显示了调用栈,这有助于确定问题发生时正在执行的代码路径。从调用栈可以看出,问题发生在 virtnet_open 函数中,随后是一系列网络相关的函数调用。
  7. 寄存器信息

    • 日志还包含了处理器寄存器的状态,这对于深入分析问题可能非常有用。

综上所述,这个日志指向了可能的网络驱动问题,特别是与 virtio_net 驱动相关的。可能需要检查网络配置、驱动兼容性或是否存在已知的驱动bug。如果是在虚拟化环境中,还需要考虑虚拟机的网络设置是否正确。此外,由于系统被标记为“污染”,可能还需要验证系统和内核的完整性。

 

在 Linux 系统中,要查看特定 PID 的进程信息,可以使用多种方法。以下是一些常用的命令:

1. **ps 命令**:
   使用 `ps` 命令可以直接查看特定 PID 的进程信息。例如:
   ```sh
   ps -p 1711 -o comm=
   ```
   这个命令会显示 PID 为 1711 的进程名称。`-o comm=` 是一个输出格式选项,用于仅显示命令名称。

2. **pstree 命令**:
   `pstree` 可以以树状图的形式显示进程,包括父子关系。你可以通过管道使用 `grep` 来过滤特定 PID:
   ```sh
   pstree -p | grep 1711
   ```
   这将显示包含 PID 1711 的进程及其在进程树中的位置。

3. **top 或 htop 命令**:
   这些工具可以实时显示系统中的进程信息。你可以通过它们的过滤功能来查找特定的 PID。在 `top` 中,你可以按 `Shift+F` 来过滤进程,然后输入 PID。在 `htop` 中,你可以直接在菜单中选择过滤进程。

4. **/proc 文件系统**:
   你可以直接查看 `/proc` 文件系统中对应 PID 的目录。例如:
   ```sh
   cat /proc/1711/status
   ```
   这个文件包含了进程的状态信息,包括进程名称、状态、父进程 ID 等。

5. **pgrep 命令**:
   如果你不确定进程名称,但知道其 PID,可以使用 `pgrep` 来查找:
   ```sh
   pgrep 1711
   ```
   这将列出所有 PID 为 1711 的进程。

请注意,你需要具有相应的权限才能查看其他用户的进程信息。如果你没有足够的权限,可能需要使用 `sudo` 来执行上述命令。此外,如果进程已经不存在,这些命令将不会返回任何信息。
 

 

BUG_ON()

  • BUG_ON() 是一个断言宏,它用于捕捉代码中的编程错误。
  • 当传递给 BUG_ON() 的条件为真时,内核会触发一个 BUG,并打印出错误信息,通常包括文件名、行号和函数名。
  • BUG_ON() 通常用于捕捉那些不应该发生的情况,比如代码中的逻辑错误或不一致的状态,它表明代码中存在严重问题。
  • 在某些架构上,BUG_ON() 可能会导致内核触发一个断断点异常(breakpoint trap),从而进入调试器或导致系统崩溃。

其中 BUG() 宏会导致内核打印出错误信息并触发崩溃。

 

参考文档:

Linux内核之BUG_ON()和WARN_ON()_linux bug()-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.9.11

时钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QTimer> #include <QPainter> #include <QPen> #include <QBrush> #include <QTime> #include <QDebug> QT_BEGIN_NA…

国内如何优雅的用Google?无需安装任何工具!

前言 Google可以说时每个程序猿的标配&#xff0c;但由于网络问题&#xff0c;在访问Google的时候或多或少都会遇到一系列的问题&#xff0c;接下来介绍一个非常“炸裂”的Google打开方式。 LiteIcoding 在此之前&#xff0c;你需要访问这个地址 https://lite.icoding.ink 这…

【Qt】QSS的设置方式

QSS的设置方式 QWidget 中包含了 setStyleSheet ⽅法, 可以直接设置样式. 上述代码我们已经演⽰了上述设置⽅式 还可以通过 QApplication 的 setStyleSheet ⽅法设置整个程序的全局样式. 设置全局样式&#xff0c;可以将界面上所有的样式都集中到一起来组织。 全局样式优点:…

56 - II. 数组中数字出现的次数 II

comments: true difficulty: 中等 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9856%20-%20II.%20%E6%95%B0%E7%BB%84%E4%B8%AD%E6%95%B0%E5%AD%97%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0%20II/README.md 面试题 56 - II. 数…

大屏可视化常用图标效果表达

1-echarts-雷达图 2-echarts-仪表盘 3-echarts-水球图&#xff08;利用插件&#xff0c;echarts-liquidfill&#xff09; 4-element UI tree 添加连接线&#xff0c;修改样式或使用插件&#xff08;element-tree-line&#xff09; 5-echarts-漏斗图 6-echarts-饼状图嵌套 optio…

力扣刷题之2181.合并零之间的节点

题干描述 给你一个链表的头节点 head &#xff0c;该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val 0 。 对于每两个相邻的 0 &#xff0c;请你将它们之间的所有节点合并成一个节点&#xff0c;其值是所有已合并节点的值之和。然后将所有 0 …

为什么 1T 的硬盘容量只有 931G?真相在这里!

硬盘容量疑问 以一个容量为 1T 的硬盘为例&#xff0c;在 Windows 系统下&#xff0c;容量显示只有 931G&#xff0c;不应该是 1024GB 吗&#xff1f;这到底是为什么呢&#xff1f;是商家在欺骗消费者吗&#xff1f; 按照之前内存大小的计算逻辑&#xff08;1MB 1024KB&…

AI电商,如何提高设计效率?

第一步&#xff1a;找参考 第二步&#xff1a;提取关键词 我用的文心一言 第三步&#xff1a;选择AI绘画工具&#xff08;千鹿 设计助手&#xff09; 千鹿设计助手——FLux文生图&#xff0c;你也可以选择你手上的AI绘画工具 这个新用户注册会赠送1000积分 第四步生图

[笔记] 电机工作制以及软硬特性的本质推导

原始资料来源&#xff1a;某电机厂商 1.电机非常规操作术语和许可次数 1.1 电机操作术语 点动&#xff1a;通电后立即关停&#xff0c;最终速度不到额定转速的1/4电制动&#xff1a;制动到额定转速的1/3逆转&#xff1a;也就是打反车&#xff0c;不等停车&#xff0c;立即翻…

Java、python、php三个版本 抗震救灾物资管理系统 抗洪救灾物资分配系统 救援物资申请平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

在 Web 中判断页面是不是刷新

在 Web 开发中&#xff0c;我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新&#xff08;如按下 F5 键或点击浏览器刷新按钮&#xff09;或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验&#xff0c;例如在使用 vue 的…

超详细,手把手带你源码启动 Thingsboard-Gateway + MQTT 接入设备

超详细&#xff0c;手把手带你源码启动 Thingsboard-Gateway MQTT 接入设备 前置条件 thingsboard&#xff0c;我这里选择的是本地源码启动postgresql&#xff0c;这里采用的是个人服务器部署的公共服务EMQX&#xff0c;这里同样采用服务器部署的公共服务MQTTX 客户端Mysql【…

Fiddle的使用------一个非常好用且正规的抓包工具

Fiddle的下载安装&#xff08;看完再去下载安装&#xff09; https://www.telerik.com/download/fiddler 1.点击连接&#xff0c;在表格填上数据&#xff0c;点击下载&#xff0c;下载结束了就安装&#xff0c;一路next就可以了。 2.修改一下设置 以上跟我一样设置&#xff…

Unity 是否能和黑神话悟空一样,接入Nivida的DLSS,用NSight Graphics实际测试

NSight作为Nivida 显卡的调试工具&#xff0c;因为国内都是手游开发盛行的年代&#xff0c;远没有RenderDoc或者高通的QuatXXX 出名 选择NSight的原因很简单&#xff1a; Nividia 财大气粗&#xff0c;倒不是主因&#xff0c; 因为其CEO爱出名&#xff0c;所以手下的人只…

视觉SLAM ch5——相机与图像

一、单目模型 前言&#xff1a;本大标题下1~4部分讲述的都是单目针孔相机 SLAM的数学本质可以抽象为运动方程&#xff08;x&#xff09;和观测方程&#xff08;z&#xff09;&#xff08;书上的第二部分&#xff09; 教材第二章截图 书中P24页截图 其中的未知量为xk&#xff…

828华为云征文|几分钟,即可在华为云Flexus X服务器部署安全稳定的——水果生鲜商城配送小程序

最近由于公司需要开发一个水果生鲜同城配送的小程序&#xff0c;源码代码已经有了&#xff0c;相对于应的功能也开发的七七八八了&#xff0c;随着生鲜商城小程序的相对于应的功能开发逐渐接近尾声。 然而&#xff0c;在这个关键时刻&#xff0c;一个至关重要的决定摆在了团队面…

javase复习day22泛型、set、数据结构

泛型 package MyGenerics;import java.util.ArrayList; import java.util.Iterator;public class GenericsTest1 {public static void main(String[] args) {//没有泛型的情况ArrayList list new ArrayList();//所有数据都被认为是Object类型&#xff0c;都可以加入集合中list…

【操作系统】汇总二、进程管理

进程管理 二、进程与线程 文章目录 进程管理二、进程与线程1.程序1.1顺序执行的特征1.2并发执行的特征1.3 C语言编写的程序 2.进程Process2.1定义&#xff08;组织&#xff09;2.1.1程序段2.1.2数据段❗2.1.3进程控制块PCB1&#xff09;内容2&#xff09;作用3&#xff09;进程…

C++详解string(全面解析)

目录 string的概念&#xff1a; string的框架&#xff1a; 1、成员函数 2、迭代器&#xff08;Iterators&#xff09;​编辑 3、容量 4、元素访问 5、修改 6、非成员函数重载 string的构造和拷贝构造&#xff1a; string的析构&#xff1a; string的访问&#xff1a;…

树模式数据表设计学习

引子&#xff1a; 场景&#xff1a;某读书网站&#xff0c;支持读者评论文章&#xff0c;并且对评论支持回复功能。设计的表如下&#xff1a; 问题点&#xff1a;你想获取一个评论下所有的评论信息&#xff1f; 将所有评论一次性取出、轮巡遍历&#xff0c;获取到所有数据。 …