zoukankan      html  css  js  c++  java
  • 驱动中回溯函数的调用关系

    1.只需要在想要回溯的函数中调用dump_stack()即可。

      dump_stack()~/kernel/ lib/Dump_stack.c中定义,使用时可能需要包含头文件#include <asm/ptrace.h>

    例如:

     1 int max9211_s_stream(struct v4l2_subdev *sd, int enable)
     2 {
     3     int ret = 0;
     4     struct max9211_priv *priv = container_of(sd, struct max9211_priv, subdev);
     5     u8 con = !!enable;
     6 
     7     switch(con){
     8         case 0:
     9             dump_stack();
    10             break;
    11         case 1:
    12             ret = max9211_init(priv->client, priv);
    13             dump_stack();
    14             break;
    15     }
    16 
    17     return ret;    
    18 }

    在max9211_s_stream()中加入dump_stack()打印出的调用关系
    [ 47.489191] [<ffff000008087c00>] dump_backtrace+0x0/0x1a8
    [ 47.494584] [<ffff000008087dbc>] show_stack+0x14/0x20
    [ 47.499633] [<ffff00000834867c>] dump_stack+0x94/0xb8
    [ 47.504682] [<ffff000008382830>] max9211_s_stream+0x1a8/0x1d8
    [ 47.510428] [<ffff00000852c950>] __rvin_start_streaming+0x118/0x168
    [ 47.516690] [<ffff00000852dbd4>] rvin_start_streaming+0x24/0x118
    [ 47.522692] [<ffff000008517c8c>] vb2_start_streaming+0x64/0x150
    [ 47.528606] [<ffff000008519bdc>] vb2_core_streamon+0x16c/0x1a0
    [ 47.534432] [<ffff00000851c3f4>] vb2_streamon+0x3c/0x60
    [ 47.539650] [<ffff00000851c460>] vb2_ioctl_streamon+0x48/0x58
    [ 47.545391] [<ffff000008502298>] v4l_streamon+0x20/0x28
    [ 47.550610] [<ffff00000850614c>] __video_do_ioctl+0x25c/0x2c8
    [ 47.556349] [<ffff000008505c88>] video_usercopy+0x230/0x478
    [ 47.561914] [<ffff000008505ee4>] video_ioctl2+0x14/0x20
    [ 47.567132] [<ffff000008500ef8>] v4l2_ioctl+0xe8/0x118
    [ 47.572267] [<ffff0000081d1ddc>] do_vfs_ioctl+0xa4/0x740
    [ 47.577572] [<ffff0000081d2504>] SyS_ioctl+0x8c/0xa0
    [ 47.582531] [<ffff00000808274c>] __sys_trace_return+0x0/0x4
    __rvin_start_streaming中可以看出根本就没有检测它的返回值!!!它的第二个参数传入的是1

    使用ctrl+c结束时打印:
    [ 71.141528] [<ffff000008087c00>] dump_backtrace+0x0/0x1a8
    [ 71.146923] [<ffff000008087dbc>] show_stack+0x14/0x20
    [ 71.151972] [<ffff00000834867c>] dump_stack+0x94/0xb8
    [ 71.157021] [<ffff0000083828a0>] max9211_s_stream+0x190/0x1e0
    [ 71.162766] [<ffff00000852d048>] __rvin_stop_streaming+0x100/0x138
    [ 71.168939] [<ffff00000852d2c4>] rvin_stop_streaming+0x10c/0x130
    [ 71.174941] [<ffff000008518420>] __vb2_queue_cancel+0x30/0x160
    [ 71.180767] [<ffff0000085187a0>] vb2_core_streamoff+0x48/0xb0
    [ 71.186507] [<ffff00000851c53c>] vb2_streamoff+0x3c/0x60
    [ 71.191811] [<ffff00000851c5a8>] vb2_ioctl_streamoff+0x48/0x58
    [ 71.197639] [<ffff000008502350>] v4l_streamoff+0x20/0x28
    [ 71.202944] [<ffff0000085061dc>] __video_do_ioctl+0x25c/0x2c8
    [ 71.208683] [<ffff000008505d18>] video_usercopy+0x230/0x478
    [ 71.214248] [<ffff000008505f74>] video_ioctl2+0x14/0x20
    [ 71.219465] [<ffff000008500f88>] v4l2_ioctl+0xe8/0x118
    [ 71.224600] [<ffff0000081d1ddc>] do_vfs_ioctl+0xa4/0x740
    [ 71.229905] [<ffff0000081d2504>] SyS_ioctl+0x8c/0xa0
    [ 71.234863] [<ffff00000808274c>] __sys_trace_return+0x0/0x4
    __rvin_stop_streaming中可以看出根本就没有检测它的返回值!!!它的第二个参数传入的是0

    参考:http://blog.csdn.net/jasonchen_gbd/article/details/45585133

  • 相关阅读:
    网站服务架构
    10年工作经验老程序员推荐的7个开发类工具
    极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒
    SQL SERVER发布与订阅
    C#开发可以可视化操作的windows服务
    highcharts图表中级入门:非histock图表的highcharts图表如何让图表产生滚动条
    MS Chart Control 學習手記(二)
    MsChart,饼状图
    c#中如何退出程序后自动重新启动程序
    2016 系统设计第一期 (档案一)MVC 控制器接收表单数据
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/7944010.html
Copyright © 2011-2022 走看看