zoukankan      html  css  js  c++  java
  • linux 内核态调试函数BUG_ON()[转]

    一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。

         当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构

         是相关的。大部分体系结构把BUG()和BUG_ON()定义成某种非法操作,这样自然会产生需要的oops。你可以把这些调用当作断言使用,想要断言某种情况不该发生:

    if (bad_thing)
    BUG(); //需要linux 内核开启General setup->Configure standard kernel features->BUG() support

    或者使用更好的形式:

    BUG_ON(bad_thing);

          可以用panic()引发更严重的错误。调用panic()不但会打印错误消息(Oops)而且还会挂起整个系统。显然,你只应该在极端恶劣的情况下使用它:

    if (terrible_thing)
           panic("foo is %ld ", foo);

     有些时候,你只是需要在终端上打印一下栈的回溯信息来帮助你测试。此时可以使用dump_stack()。它只在终端上打印寄存器上下文和函数的跟踪线索:

    if (!debug_check) {
           printk(KERN_DEBUG "provide some information... ");
           dump_stack();
    }

  • 相关阅读:
    函数 20140829
    结构体 20140827
    经典小游戏--推箱子
    更改版本与集合 20140826
    冒泡排序 20140823
    数组 20140822
    语句与字符串的属性及方法 20140820
    20141021WinForm控件属性
    20141014C#面向对象抽象方法,抽象类,接口
    20141011C#面向对象基础
  • 原文地址:https://www.cnblogs.com/woshare/p/5770905.html
Copyright © 2011-2022 走看看