> 文档中心 > OpenHarmony下如何打印C/C++调用堆栈

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


          普法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 #include #include 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_service01-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, std::__h::allocator<std::__h::shared_ptr > > 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.so01-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 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 const&)+856)

写在最后

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

在这里插入图片描述

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