BugProfiler功能使用介绍

简介: BugProfiler功能使用介绍

目前BugProfiler主要是用来定位lj_meta_cache函数的调用情况:


image.png


选项解释

enabled

是否启用bugProfiler功能

log save directory

log文件的保存目录

cpp filter

对c++的堆栈进行过滤,如果堆栈包含有指定的字符串,那么就会被保存到log文件中

  • 如果不需要过滤,填写空字符串即可
  • 如果有适配多个字符串,使用,分割(注意:如果字符串中包含空格也会参与过滤),比如:
a,b,c
  • 只要c++堆栈中包含a、或者b、或者c、都认为是一个有效的结果

我们可以通过bugly,尽可能的找到崩溃相关的函数,通过cpp filter,我们会收集到有针对性的log,减少干扰项

watch

当watch启用时,BugProfiler就会开始收集相关log。

当watch禁用后,会自动生成日志文件


image.png


watch属性后边会有一个数字,表示当前收集到的log数量,我们可以通过该数字很只管的观察到log的大致情况。

日志文件示例

call lj_meta_cache history:
#1 hash:66860401
  TextureTools::cppStack at E:\proj\tank5\client\frameworks\runtime-src\Classes\tools\TextureTools.cpp:145
  collectionCallStackInfo at E:\proj\tank5\client\frameworks\qt-editor\src\editor\module\ModuleBase.cpp:115
  emitHookFunction at E:\proj\tank5\client\frameworks\qt-editor\src\luajit\src\lib_hook.c:14
  lj_meta_cache at E:\proj\tank5\client\frameworks\qt-editor\src\luajit\src\lj_meta.c:53
  lj_meta_tset at E:\proj\tank5\client\frameworks\qt-editor\src\luajit\src\lj_meta.c:175
  lua_settable at E:\proj\tank5\client\frameworks\qt-editor\src\luajit\src\lj_api.c:967
  storeatubox at E:\proj\tank5\client\frameworks\cocos2d-x\external\lua\tolua\tolua_event.c:34
  class_newindex_event at E:\proj\tank5\client\frameworks\cocos2d-x\external\lua\tolua\tolua_event.c:377
  <__newindex> at =[C]:-1
  <func> at .\cocos/cocos2d/functions.lua:268
  <goLayer> at .\index.lua:152
  [Lua] at .\index.lua:129
#2 hash:66860401
  see details same by hash 
#3 hash:66860401
  see details same by hash

#numer可以看到触发lj_meta_cache函数的次数,通过hash,精简了log,更加清楚的看到调用情况。

使用实例

  1. 尽可能多的获取c++堆栈的函数,比如bugly上报的崩溃堆栈,如果崩溃堆栈是符号地址,需要通过addr2line等相关工具换取相关的函数名字,相关工具推荐vscode插件-addr2line-assistant
  2. 最好确认一些c++堆栈的函数,在源码中是否存在,luajit源码参考,注意luajit的部分源码是编译生成的,昂库里面可能没有。
  3. 将获取到的c++堆栈函数,填写到cpp filter里面,这样可以过滤不符合堆栈信息的结果,比如:lj_meta_cache,rec_call_setup


image.png


  1. 点击watch监听游戏,当完成相关游戏操作后,取消watch即可生成lj_meta_cache.log,此时的log是经过cpp filter过滤后的
  2. 分析log,排查定位问题



目录
相关文章
daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)
daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)
221 0
|
11月前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
416 4
【AI系统】计算图优化架构
|
存储 Kotlin 容器
Kotlin 变量详解:声明、赋值与最佳实践指南
**Kotlin 变量简介** Kotlin 中使用 `var` 定义可变变量,`val` 定义常量。类型可自动推断,如 `var name = &quot;John&quot;`(String)和 `val birthyear = 1975`(Int)。`val` 一旦赋值不可变,`var` 则可变。变量名遵循驼峰命名法,且不能为保留字。`println()` 用于打印变量值。可使用 + 连接字符串或执行数学运算。
197 0
|
人工智能 Linux Docker
一文详解几种常见本地大模型个人知识库工具部署、微调及对比选型(1)
近年来,大模型在AI领域崭露头角,成为技术创新的重要驱动力。从AlphaGo的胜利到GPT系列的推出,大模型展现出了强大的语言生成、理解和多任务处理能力,预示着智能化转型的新阶段。然而,要将大模型的潜力转化为实际生产力,需要克服理论到实践的鸿沟,实现从实验室到现实世界的落地应用。阿里云去年在云栖大会上发布了一系列基于通义大模型的创新应用,标志着大模型技术开始走向大规模商业化和产业化。这些应用展示了大模型在交通、电力、金融、政务、教育等多个行业的广阔应用前景,并揭示了构建具有行业特色的“行业大模型”这一趋势,大模型知识库概念随之诞生。
156157 30
语音软件源码开发搭建,好友管理功能剖析
我们就成功实现了语音软件源码好友管理功能,这一功能对于语音软件源码平台是非常重要,语音软件源码好友管理功能可以为我们的社交增添一份坚实的力量。
语音软件源码开发搭建,好友管理功能剖析
|
编译器 程序员 API
【踩坑记录】解决GCC 中C++ 17 的 std::filesystem 链接报错:undefined reference to `std::filesystem::path
【踩坑记录】解决GCC 中C++ 17 的 std::filesystem 链接报错:undefined reference to `std::filesystem::path
3138 4
|
存储 安全 算法
【C++ 17 新特性 】拥抱现代C++:深入C++17特性以获得更高效、更安全的代码
【C++ 17 新特性 】拥抱现代C++:深入C++17特性以获得更高效、更安全的代码
4766 1
|
Java 数据安全/隐私保护 C++
bugly崩溃排查2:luajit编译调试
bugly崩溃排查2:luajit编译调试
395 0
|
监控 JavaScript C++
监控游戏c/c++的崩溃的解决方案
监控游戏c/c++的崩溃的解决方案
267 0
|
存储 Serverless 定位技术
基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析
基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析
255 2