OpenHarmony下如何打印C/C++调用堆栈

news2024/10/7 8:30:00

          普法OpenHarmony下如何打印C/C++调用堆栈



引言

  各位大姐,老妹,兄弟是否在OpenHarmony开发移植过程中有过如下烦恼呢?想跟踪源码探寻相关代码逻辑的时候,当面对代码分支逻辑太多,太复杂,打调试信息进行追踪已经没有可能的窘困时候。此时的你是否在黯然神伤,想过放弃呢。没有关系,因为你看到了这篇,从此可以为你打开新世界的大门,增加一种调试手段,那就是OpenHarmony下打印C/C++调用堆栈。学会了此招,虽然不能是您内力突增,但是学习起来辟邪剑谱,九阳真经等上等功夫会精进许多。

其实嘛,这段是废话!各位如果有紧急事情可以直接跳过,进入下一环节!




一.如何引入

前面给朋友们扯了半天,还没有进入正题太不应该了!是时候展示真正的技术了!开搞!


1.1 在BUILD.gn中引入头文件

这里的BUILD.gn必须是你需要跟踪堆栈的文件所对应的BUILD.gn中,而不是随便一个。这个地方必须注意!

  include_dirs = [
    "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher/include/",
  ]

1.2 在BUILD.gn中引入依赖

这里的BUILD.gn必须是你需要跟踪堆栈的文件所对应的BUILD.gn中,而不是随便一个。这个地方必须注意!

  deps = [
    "//base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:lib_dfx_dump_catcher",
  ]

1.3 在要使用的地方使用

这里的BUILD.gn必须是你需要跟踪堆栈的文件所对应的BUILD.gn中,而不是随便一个。这个地方必须注意!

#include "dfx_dump_catcher.h"
#include <iostream>
#include <string>
#include <unistd.h>
using namespace std;



OHOS::HiviewDFX::DfxDumpCatcher dumplog;
std::string msg = "";
bool result = dumplog.DumpCatch(getpid(), gettid(), msg);
if (result) {
    HLOGD("xxx %{public}s", msg.c_str());
}


1.4 具体打印效果

前面扯了这么多疗效是如何如何好,不见得真家伙摆上是不行了。这不上酸菜了。

01-01 00:00:28.030   657   657 D 01400/OHOS::RS: CommitLayers Tid:657 comm:render_service
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #00 pc 000000000004a18c /system/lib64/librender_service.z.so(OHOS::Rosen::RSComposerAdapter::CommitLayers(std::__h::vector<std::__h::shared_ptr<OHOS::Rosen::HdiLayerInfo>, std::__h::allocator<std::__h::shared_ptr<OHOS::Rosen::HdiLayerInfo> > > const&)+124)
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #01 pc 00000000000803a8 /system/lib64/librender_service.z.so(OHOS::Rosen::RSRenderServiceVisitor::ProcessDisplayRenderNode(OHOS::Rosen::RSDisplayRenderNode&)+3816)
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #02 pc 000000000007f100 /system/lib64/librender_service.z.so(OHOS::Rosen::RSRenderServiceVisitor::ProcessBaseRenderNode(OHOS::Rosen::RSBaseRenderNode&)+136)
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #03 pc 0000000000055768 /system/lib64/librender_service.z.so(OHOS::Rosen::RSMainThread::Render()+1568)
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #04 pc 0000000000059ad4 /system/lib64/librender_service.z.so
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #05 pc 000000000000f8fc /system/lib64/libeventhandler.z.so(OHOS::AppExecFwk::EventHandler::DistributeEvent(std::__h::unique_ptr<OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)> const&)+856)
01-01 00:00:28.030   657   657 D 01400/OHOS::RS: #05 pc 000000000000f8fc /system/lib64/libeventhandler.z.so(OHOS::AppExecFwk::EventHandler::DistributeEvent(std::__h::unique_ptr<OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)> const&)+856)



写在最后

到这里,OpenHarmony下如何打印C/C++调用堆栈就告一段落了!。OpenHarmony值路漫漫吾将上下而求索,总之,各位,青山不改绿水长流先到这里了!

在这里插入图片描述

参考
1.FaultLoggerd组件
2.DFX工具HiDumper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mach-O

看看逆向过程中&#xff0c;经常遇见的Mach-O文件类型&#xff1a; MH_OBJECT&#xff0c;这种类型的文件有目标文件(.o)、静态库文件(.a) &#xff08;静态库文件就是N个.o文件合并在一起的&#xff09; MH_EXECUTE&#xff0c;可执行文件&#xff0c;例如上面说的Super文件 …

如何选择一款好的护眼台灯给孩子用?儿童护眼台灯推荐

所以也想要分享给大家&#xff0c;那么热爱看书的你&#xff0c;是否有时候会因为光源的问题而烦恼呢&#xff1f;房间所用的大灯虽然亮度足够&#xff0c;但太过于分散的光&#xff0c;让眼睛在长期聚精会神后&#xff0c;有了红肿干涩&#xff0c;酸痛模糊的感觉。而专用的台…

界面控件DevExpress Blazor UI v22.2 - 折叠组件、数据编辑器升级增强

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具&#xff0c;该组件拥有众多新产品和数十个具有高影响力的功能&#xff0c;可为桌面、Web和移动应…

远程桌面基本原理

远程桌面基本原理 远程桌面是一种技术&#xff0c;它允许用户通过互联网或局域网远程访问另一台计算机的桌面。这种技术可以让用户在不同的地方使用同一台计算机&#xff0c;或者在同一地方使用不同的计算机。远程桌面技术在现代计算机应用中发挥着重要的作用&#xff0c;本文将…

达索的CAD绘图软件DraftSight 2023版本下载与安装配置教程

目录 前言一、​安装前准备二、DraftSight安装三、使用配置总结 前言 Dassault Systemes公司的DraftSight软件是一款功能强大的2D CAD绘图软件&#xff0c;可以帮助用户快速、准确地创建和编辑各种类型的图形。它的用户界面简单易用&#xff0c;支持多种文件格式&#xff0c;包…

C++ | function

C | function 文章目录 C | function引言实战1. 模板类声明2.普通函数/Lambda表达式/仿函数/类成员函数3.函数指针/模板函数/模板函数对象4.静态函数/类模板静态函数/模板类成员函数/类成员函数5. copy/move Reference 引言 程序设计时&#xff0c;经常需要使用回调函数&#…

多语言支持-唯一客服系统文档中心

客服系统支持多语种展示&#xff0c;比如&#xff1a;中文&#xff0c;英文&#xff0c;繁体&#xff0c;日语&#xff0c;韩语&#xff0c;俄语等&#xff0c;并且可以扩展各种小语种 语种展示的优先级 首先&#xff0c;按照url参数中指定的lang参数 其次&#xff0c;查询loca…

Open5gs学习笔记

目录 1.用户面和控制面分离 最近想在liunx模拟机上运行Open5GSUERANSIM来学习5G信令流程。 1.用户面和控制面分离 open5GS的quickstart提及By having the control and user planes physically separated like this, it means you can deploy multiple user plane servers in …

灾难恢复:支持业务连续性的策略——保证员工和客户始终可以访问关键数据和应用程序

灾难恢复&#xff1a;支持业务连续性的策略 保证员工和客户始终可以访问关键数据和应用程序。 为什么选择 NetApp 的业务连续性和灾难恢复解决方案&#xff1f; 保持弹性&#xff0c;自如操作 NetApp 就在您身边&#xff0c;在这样一个跌宕起伏的时期竭诚帮助您实现业务连续性…

一秒钟变身明星:用swapface软件体验星光熠熠的感觉!

你是否曾经想过能够用电脑或手机来实时地将自己的面部与其他人或角色进行交换&#xff1f;你是否曾经想过能够用一款简单易用的软件来制作出有趣或惊艳的面部交换直播、视频或图片&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定要试试swapface软件&#xff0c;这是一…

Linux服务器内核崩溃问题分析

阿里云服务器无法使用SSH连接&#xff0c;网站访问也出现异常&#xff0c;登录阿里云平台&#xff0c;系统提示&#xff1a;系统出现了内核Panic&#xff0c;OOM异常或内部宕机、性能抖动。后台询问了阿里云客服&#xff0c;说需要安装和开kdump 服务&#xff0c;于是开始了kdu…

九耶丨阁瑞钛伦特-springcloud(八)

SpringCloud体系结构是一个基于Spring框架的云原生微服务架构。它具有高可用性、高可扩展性、低时延和高安全性等特点&#xff0c;能够帮助企业构建高效、快速、安全、可靠的微服务体系架构&#xff0c;并支持跨云供应商和私有数据中心的部署。 SpringCloud体系结构的核…

2023 年第八届数维杯数学建模挑战赛 赛题浅析

为了更好地让大家本次数维杯比赛选题&#xff0c;我将对本次比赛的题目进行简要浅析。本次比赛的选题中&#xff0c;研究生、本科组请从A、B题中任选一个 完成答卷&#xff0c;专科组请从B、C题中任选一个完成答卷。这也暗示了本次比赛的难度为A>B>C 选题人数初步估计也…

windows网络常用命令,须熟记。

目录&#xff1a; 常用网络命令&#xff08;一&#xff09;-- ping操作 常用网络命令&#xff08;二&#xff09;-- IPConfig操作 常用网络命令&#xff08;三&#xff09;-- netstat 命令 和 tracert 命令 常用网络命令&#xff08;四&#xff09;-- route 命令 和 arp 命令 常…

视频国标GB28181及一个相关平台的应用

一、国标GB28181 1、概述 所谓国标GB28181&#xff0c;是我国制订的一项视频流接入协议。好处是&#xff0c;只要摄像头支持该项协议&#xff0c;那么无论是海康还是大华&#xff0c;或者别的什么摄像头&#xff0c;都能接入一个支持该协议的媒体平台&#xff0c;达到无缝集成…

USB Type-C接口会成为显示器行业的下个风口吗?

最近市场上开始陆续涌现配有USB-C接口的显示器&#xff0c;很多小伙伴并不知道这接口是什么用途。除一些老旧设备使用VGA外&#xff0c;目前显示器常用接口不外乎HDMI、DP、DVI这几种&#xff0c;但很多人并不知道&#xff0c;USB-C也是显示器接口之一。 为什么选择 USB-C&…

ubuntu下vlan使用配置

文章目录 一&#xff1a;什么是vlan1 &#xff1a;为什么使用vlan 二&#xff1a;ubuntu下vlan配置1: ubuntu启用配置vlan前的准备2&#xff1a;ip命令添加配置网卡3&#xff1a;vlan相关命令配置4&#xff1a;ubuntu 20.04 通过netplan配置及持久化5&#xff1a;ubuntu 18.04 …

linux环境安装使用jdk详解

01-安装JDK 1.1 下载jdk压缩包 下载地址&#xff1a; Oracle Access Manager Operation Error Java Downloads | Oracle 下载完成之后上传到服务器 # 1.将JDK解压缩到指定目录 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/ 注意:-C参数是将JDK解压之后文件放入usr目录中 # 2…

第43讲: Python使用map和filter函数遍历可迭代对象

文章目录 1.遍历迭代对map和filter函数的区别2.使用map函数对可迭代对象进行遍历3.使用filter函数对可迭代对象进行遍历 1.遍历迭代对map和filter函数的区别 map和filter这两个函数都可以根据指定的另外一个函数&#xff0c;从而对指定的可迭代对象&#xff08;列表、字符串、…

哪款蓝牙耳机舒适度最好?舒适度好的蓝牙耳机推荐

蓝牙耳机现在早就成为年轻人生活必备品&#xff0c;尤其是在通勤路上、大街上&#xff0c;基本都随处可见耳朵上挂着的小蓝牙设备&#xff0c;本文针对每种类型的蓝牙耳机&#xff0c;推荐了几款佩戴舒适度高的蓝牙耳机。 第一款、南卡小音舱Lite2蓝牙耳机 售价&#xff1a;2…