• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux内核设备驱动之内核的调试技术笔记整理
    /******************
     * 内核的调试技术
     ******************/

    (1)内核源代码中的一些与调试相关的配置选项

    内核的配置选项中包含了一些与内核调试相关的选项,都集中在"kernel hacking"菜单中。包括:

    CONFIG_DEBUG_KERNEL

    使其他的调试选项可用,应该选中,其本身不会打开所有的调试功能。

    具体的调试选项说明可参见驱动一书,或通过menuconfig的help说明查看。

    (2)如何通过宏对printk调试语句进行全局控制

    通过和Makefile配合,可以在c文件中定义属于我们自己的调试语句。

    (3)strace的使用

    strace可以跟踪由用户空间程序所发出的所有系统调用。有用的参数有:

    strace对于发现系统调用时的细微错误非常有用,尤其是针对多进程的程序,可以通过strace输出的返回值和进程pid获得大量有用信息。如:

    $>strace -o zht.txt -f ./process_create

    (4)ltrace的使用

    ltrace可以跟踪由用户空间程序所发出的所有动态库函数调用。有用的参数有:

    (5)查看oops消息

    oops是内核告知用户有不幸发生的最常用方式。通常,发送完oops后,内核会处于一种不稳定状态。

    在某些情况下,oops会导致内核混乱,而混乱的结果就是死机,这些情况可能包括:

    如果oops在其他进程运行时发生,内核会杀死该进程并尝试着继续运行。oops的产生有很多原因,包括内存访问越界或非法指令等。

    oops包含的最重要讯息是寄存器上下文和回溯线索(call trace)可以人为引起oops,如:

    if(bad_thing)
     BUG();
    //或 BUG_ON(bad_thing);

    可以用panic()引发更严重的错误,调用panic()不但会打印错误信息,还会挂起整个系统。只有在极端恶劣的情况下才会使用:

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

    有些时候,只要打印一下栈信息就可以帮助测试,如dump_stack():

     if(!debug_check){
      printk(KERNEL_DEBUG "provide some info\n");
      dump_stack();
     }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:Linux内核设备驱动之内核中链表的使用笔记整理
    下一篇:Linux内核设备驱动之系统调用笔记整理
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux内核设备驱动之内核的调试技术笔记整理 Linux,内核,设备驱动,之,