输出调用栈函数名

在余老大(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.

 

Oracle MCP Server实战:自然语言如何重塑数据库交互体验 本文深入探讨了Oracle MCP Server如何通过自然语言交互技术革新数据库操作体验。作为Oracle数据库的革命性工具,MCP Server集成了先进的Text-to-SQL技术,允许用户使用自然语言直接查询数据库,大幅降低使用门槛。文章详细介绍了从环境搭建、实战案例到企业级部署的全流程,特别强调了中文自然语言处理能力和安全最佳实践,为DBA和开发者提供了从传统SQL到智能交互的转型指南。 阅读详情

相关推荐

HTML5期末大作业:关于家乡介绍的HTML网页设计——郑州美景HTML+CSS(5页) 学生DW家乡介绍网页设计作业成品 web课程设计网页规划与设计

HTML5期末大作业:我的家乡——郑州美景HTML+CSS(5页) 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大学生网页大作业网页设计需求, 喜

qq_365392777 1万+

数据结构-栈(C语言代码)

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct.

weixin_50246370的博客 5997

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

在应用程序中输出函数调用栈

在内核中,我们可以使用dump_stack()函数来方便的输出函数调用沾。这给了我们很大的便利-无论是理解内核还是调试内核。但是在应用程序中我们该如何输出函数调用栈呢? Linux下我们可以是用下面的函数。// 获取将backstrace信息,将地址存到buffer中。 // 参数size指定buffer的最大值,返回值则是backstrace的实际大小 int backtrace (void **buffer, int size)

leopard_ray的专栏 3579

Sony SLVS-EC接口实战:如何用Xilinx K7 FPGA接收IMX421传感器数据(附电气特性匹配技巧)

本文详细介绍了在Xilinx Kintex-7 FPGA平台上实现Sony IMX421图像传感器SLVS-EC接口数据接收的完整实战方案。内容涵盖从硬件选型、PCB布局的电气特性匹配技巧,到FPGA内部GTX收发器配置、多通道绑定以及SLVS-EC协议数据解析与图像重组的关键步骤,为高速视觉系统开发提供了宝贵的调试经验和系统集成指导。

efc12345678的博客 265

SOLIDWORKS Flow Simulation 颗粒分离器仿真:从流场分析到分离效率优化

计算流体力学(CFD)是研究流体流动、传热及相关物理现象的核心工具,其基本原理是通过数值方法求解控制流体运动的纳维-斯托克斯方程。在工程实践中,CFD的价值在于能够对复杂流动进行高保真度仿真,从而在产品设计阶段预测性能、优化结构,显著降低物理样机的试制成本和周期。颗粒分离器作为环保、化工、矿业等领域的关键设备,其设计核心在于平衡分离效率与压力损失。借助SOLIDWORKS内嵌的Flow Simulation模块,工程师可以高效地执行流体仿真,特别是对涉及离散相的颗粒运动进行轨迹追踪和效率统计。该技术方案通过

weixin_28709649的博客 326

三大调试工具gdb,*trace,systemTap使用指南

总体而言三者各有千秋,gdb可动态调试,ftrace主打系统函数追踪,而systemtap功能很强大,个人感觉基本覆盖了ftrace,且能动态捕获系统函数或应用函数的执行时间,项目工作中很实用。

千墨 的优快云《断剑情雪》《月颜牌》,本人文章全部免费,仅供学习。 2991

Windows用户必看:如何在WSL中完美安装CosyVoice的ttsfrd依赖(附避坑指南)

本文为Windows用户提供了在WSL中部署CosyVoice语音合成模型并解决其关键依赖ttsfrd的完整指南。文章详细介绍了从WSL环境配置、Python环境搭建、模型下载到ttsfrd深度安装与问题排查的全流程,并针对WSL特有的文件系统、权限和GPU支持问题提供了解决方案,帮助开发者高效攻克部署难题。

dell8的博客 248

输出 函数调用栈

1.简介在计算机科学中,函数调用栈是用来存储计算机程序中当前被调用函数的相关信息的一种数据结构,该数据结构以栈的形式被组织的。具体相关信息可以参考wiki上的介绍。2.函数说明这篇博客主要讲述如何使用API输出函数调用栈。#include <execinfo.h>int backtrace(void **buffer, int size); char **backtrace_symbols(void

zkreats的博客 1056

手把手教你学Simulink--Simulink智能驾驶场景挑战:高速公路入口匝道汇入仿真

高速公路入口匝道汇入在智能驾驶中的作用是当车辆从入口匝道进入主干道时,系统能够自主决策并执行汇入操作,确保安全和高效。目标识别与跟踪:如检测前方障碍物、识别车道线。路径规划:如计算最优汇入路径。动态控制:如调整速度、转向等以完成汇入动作。本示例将展示如何使用Simulink构建一个用于智能车辆高速公路入口匝道汇入的仿真模型,并进行验证。通过本指南,我们介绍了如何基于Simulink搭建一个用于智能车辆高速公路入口匝道汇入的仿真模型,并进行仿真和性能评估。背景介绍。

MHD0815的博客 264

机器人中的数值优化(十四)——罚函数法(Penalty Method)、障碍函数法(Barrier Method)、拉格朗日松弛法(Lagrangian Relaxation)

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 5221

使用栈的函数的经典例题

使用栈的函数的经典例题,一看就记住

m0_62823318的博客 1543

⭐️VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机(完整安装步骤详细图文教程)

Windows XP是微软公司研发的计算机操作系统,于2001年10月25日正式发布。其名字中“XP”的意思来自英文中的“体验”(Experience)。Windows XP使用了Luna图形用户界面和双列开始菜单,提升了系统的安全性和工作性能,提供了WiFi支持,简化了软件的安装和运行,并增加了远程桌面功能。

Python老吕的博客 1万+

输出调用栈函数名---丁林.tb

http://dinglin.iteye.com/category/132573 转载于:https://www.cnblogs.com/zengkefu/p/5647095.html

weixin_30525825的博客 122

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

linux下打印调用栈

#include #include #include #include "stackTrace.h" /* 打印调用栈的最大深度 */ #define DUMP_STACK_DEPTH_MAX 16 /* 打印调用栈函数 */ void dump_trace() { void *stack_trace[DUMP_STACK_DEPTH_MAX] = {0}; cha

cuiweixie的专栏 604

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

打印调用栈的函数print_stack_trace

打印调用栈的函数print_stack_trace     /* * 打印调用栈的信息 * @param string $msg * 需要打印出来的消息 * @param function $log_handler * 处理日志的函数,如果为null,则调用print函数打印日志 * @param string $endline * 行结束符,如...

唐武的博客 1334

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C中打印堆栈或者通过函数指针获取函数名

c语言中如果需要打印函数堆栈或者根据函数指针输出函数名。 可以使用一下函数。 需要注意的一点就是,需要在链接时候增加-rdynamic的设置。           #include          int backtrace(void **buffer, int size);          char **backtrace_symbols(void *const *buff

追寻神迹 3718

在C/C++程序里打印调用栈信息

我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好不过了。本文介绍和调用椎栈相关的几个函数。 NAME backtrace, backtrace_symbols, backtrace_symbols...

weixin_33787529的博客 754

函数调用栈学习

这段时间写程序,一直有个想法,就是知道当前执行处的函数调用栈。今天网上搜到原来有backtrace这个函数,还没来得及试验,先把原来的整理一下,算是了解下。 根据网上的图片,根据程序画了图增强下理解。 试验程序(均在32位机子上) #include<stdio.h>shortfun2(intpa,unsignedcharpb){unsign...

weixin_30551947的博客 90

给RT-Thread的RT_ASSERT加点‘料’:手把手教你定制断言处理,让死机问题自己‘开口说话’

本文详细介绍了如何为RT-Thread的RT_ASSERT定制增强版断言处理机制,通过扩展信息维度、多样化输出渠道和实现调用栈回溯等功能,使死机问题能够自我暴露根源。文章提供了从基础框架搭建到高级功能扩展的完整实现步骤,帮助开发者快速定位和解决嵌入式系统中的复杂问题。

weixin_30836759的博客 408

mysql火焰图_火焰图(flame graph)是性能分析利器

Perf命令Perf 命令(performance的简写)是 Linux 系统原生提供的性能分析工具,返回 CPU 正在执行的函数名以及调用栈(stack)。通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。$ sudo perf record -F 99 -p 13204 -g -- sleep 30注:p...

weixin_40008870的博客 279

Android native问题定位

关于Android native问题,之前KMS有介绍使用addr2line结合so文件定位问题的方法, 一,使用addr2line addr2line是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具. 用linux自带addr2line工具(/usr/bin/目录)查看调用栈: 1.编译生成带符号的so库文件,将相应的bin文件烧入手机,重现问题; 2.根据du

twilight041132的专栏 6800

ffmpeg 中 av_log 是怎样工作的?

av_log 功能其实只是添加了颜色,LOG级别,及log上下文名称,没有添加时间,函数名称,行号等信息.

hjjdebug的专栏 860

STM32程序发生异常崩溃时,怎样从串口输出当时的程序调用栈等信息

当STM32程序发生异常崩溃时,为了从串口输出当时的程序调用栈信息,并使用Keil等工具确定具体的函数信息

捕鲸叉的专栏 1534

logrus中输出文件名、行号及函数名

日志中输出文件名,行号及函数名是个比较有用的功能,那么在logrus中如何作到呢? 1. 在处带Formatter中输出 logrus有两个片带的Formatter,分别是:TextFormatter和JSONFormatter。要在这两个Formatter中输出文件名,行号和函数名,只需要设置 logrus.SetReportCaller(true) 1.1 在TextFormatter中输出 func Demo(){ logrus.Info("i'm demo") } func main(){

未来可7 8339

【Linux在程序运行时打印调用栈信息(函数名,文件行号等)】

【代码】【Linux在程序运行时打印调用栈信息(函数名,文件行号等)】

AntigravityC的博客 1140
上一篇: 让MySQL支持欧元字符
下一篇: 关于InnoDB中buf_page_is_corrupted的优化
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值