`
丁林.tb
  • 浏览: 790592 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

输出调用栈函数名

阅读更多

在余老大(http://blog.yufeng.info/)的指引下开始学习SystemTap了。

最近要追查MySQL中一个耗时函数的调用栈,刚好用到这个神器。在1.3版本中自带的tapset中有 print_ubacktrace sprint_ubacktrace 这两个函数。输出的格式是 函数名+地址 [进程名]“ 为了得到函数名,要作字符串处理。

早上在tapset中发现了另外一个函数print_ubacktrace_brief 输出格式是 函数名+地址

 因此想到如果能有个函数只输出函数名就好了,依葫芦画瓢可以自定义函数如下。

 

function sprint_ubacktrace_func () %{
/* unprivileged */ /* pragma:uprobes */ /* pragma:vma */
  assert_is_myproc();

  /* use task_pt_regs, CONTEXT->regs might be kernel regs, or not set. */
  if (current->mm)
    {
      struct pt_regs *uregs;
      int valid;
      if (CONTEXT->regs && (CONTEXT->regflags & _STP_REGS_USER_FLAG))
        {
          uregs = CONTEXT->regs;
          valid = 1;
        }
      else
        {
          uregs = task_pt_regs(current);
          valid = _stp_task_pt_regs_valid(current, uregs);
        }

      if (uregs)
        {
          _stp_stack_sprint (THIS->__retvalue, MAXSTRINGLEN, _STP_SYM_SYMBOL|_STP_SYM_POST_SPACE,
                             uregs, CONTEXT->pi, MAXTRACE,
                             current, CONTEXT->ri, valid);
          return;
        }
    }

    strlcpy (THIS->__retvalue, "", MAXSTRINGLEN);
%}

 

其实重点就是_stp_stack_sprint函数的第三个参数,自己定义不同的宏有不同的效果。简单例子中进程ex_stack调用顺序为 main -> p1 -> p2 -> p3 -> p4,则在 process(“ex_stack”).function(“p4”).call 中调用上面这个函数,返回值为

" p4 p3 p2 p1 main  xxxx(空格隔开)"

 

直接显示省了字符串处理J

另外,脚本中使用这函数的话,记得带-g.

 

0
0
分享到:
评论

相关推荐

    C++高效获取函数调用堆栈

    C++ 获取函数调用堆栈的 高效实现代码

    C语言函数调用栈(三)

    本节通过代码实例分析函数调用过程中栈帧的布局、形成和消亡。示例代码如下:该程序每个函数都嵌入汇编代码,以获取各函数运行时刻EBP和ESP寄存器的值。每个函数都打印出EBP寄存器所指向内存地址处的值,以及位于其...

    AndroidStudio自动打log插件

    以上包括tag,类名,函数名,参数,所在行数。 同时支持快速统计时间、打印调用栈 统计时间举例: xzw_time + 快捷键 打印调用栈举例: xzw_trace + 快捷键 源码github地址:...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf 函数(格式输出函数) 56 4.5.2 scanf函数(格式输入函数) 58 顺序结构程序设计举例 60 45 分支...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf 函数(格式输出函数) 56 4.5.2 scanf函数(格式输入函数) 58 顺序结构程序设计举例 60 45 分支...

    零起点学通C++多媒体范例教学代码

    13.9.1 在虚函数中调用成员函数 13.9.2 3种调用虚函数的方式比较 13.10被继承的虚函数仍然是虚函数 13.11系统是如何调用虚函数的 13.12在虚函数中使用成员名限定 13.13虚析构函数 13.14总结 第14章 数组 14.1 数组...

    零起点学通C++学习_多媒体范例教学代码

    13.9.1 在虚函数中调用成员函数 13.9.2 3种调用虚函数的方式比较 13.10被继承的虚函数仍然是虚函数 13.11系统是如何调用虚函数的 13.12在虚函数中使用成员名限定 13.13虚析构函数 13.14总结 第14章 数组 ...

    Ollydbg动态监听

    这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮 OllyDbg的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的...

    精通WindowsAPI 函数 接口 编程实例

    6.5.4 运行时动态获取DLL导出函数地址并调用 189 6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口 190 6.5.6 通过构建导入表调用DLL导出函数 191 第7章 线程同步 192 7.1 基本原理 192 ...

    华为C++笔试题全部汇总

    2. 一个类里可以同时存在[同一个类里无论什么函数都不能函数名和参数完全一样]参数和函数名都相同的虚函数与静态函数(错误) 3. 父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类指针(指向该子类对象...

    C++编程思想习题

    14.8.1构造函数调用次序 14.8.2虚函数在构造函数中的行为 14.9析构函数和虚拟析构函数 14.10小结 14.11练习 第15章 模板和包容器类 15.1包容器和循环子 15.2模板综述 15.2.1C方法 15.2.2Smalltalk方法 15.2.3模板...

    OllyICE,od

    这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮: OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是...

    新手学习C++入门资料

    在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。 1.参数个数不同 #include iostream.h void a(int,int); void a(int); int main...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    3.2.3 调用函数的函数 73 3.2.4 返回布尔值的函数 75 3.2.5 定义void函数 76 3.2.6 void函数中的return语句 77 3.2.7 前提条件和执行结果 78 3.2.8 main函数 79 3.2.9 递归函数 79 3.3 作用域规则 80 3.3.1...

    传智播客扫地僧视频讲义源码

    19_函数调用模型_主调函数和被调用函数 20_课堂答疑_函数调用流程入栈出栈过程 21_指针也是一种数据类型_基础 22_指针也是一种数据类型_强化_传智扫地僧 源码及文档 01_课程回顾 02_作业题强化和野指针 03_向null...

    精通Windows.API-函数、接口、编程实例.pdf

    6.5.4 运行时动态获取DLL导出函数地址并调用 189 6.5.5 声明导出函数、创建lib库,为其他模块提供导入表调用接口 190 6.5.6 通过构建导入表调用DLL导出函数 191 第7章 线程同步 192 7.1 基本原理 192 ...

    数据结构——队列的应用.doc

    " "主函数调用杨辉三角输出函数,实现n行杨辉三角输出。 " "性质 " "设计性 " "实验学时 " "2学时 " "实验环境 " "C与C++程序设计学习与实验系统 " "实验内容及步骤 " "(一).内容 " "定义循环队列的存储结构,完成...

Global site tag (gtag.js) - Google Analytics