Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
dbb64b46
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
dbb64b46
编写于
12月 03, 2020
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(debug/android): opt android backtrace
GitOrigin-RevId: d8cef5f7c1e0a800fff1dd4f2fcbca679204fb65
上级
3e00e3f6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
2 deletion
+28
-2
src/core/impl/utils/debug.cpp
src/core/impl/utils/debug.cpp
+28
-2
未找到文件。
src/core/impl/utils/debug.cpp
浏览文件 @
dbb64b46
...
...
@@ -44,7 +44,11 @@ using namespace debug;
#include <sys/types.h>
#ifdef __ANDROID__
#include <dlfcn.h>
#include <unwind.h>
#include <iomanip>
#include <iostream>
#include <sstream>
#else
#ifndef WIN32
#include <execinfo.h>
...
...
@@ -84,7 +88,7 @@ static _Unwind_Reason_Code android_unwind_callback(
return
_URC_NO_REASON
;
}
size_t
backtrace
(
void
**
buffer
,
size_t
max
)
{
size_t
android_
backtrace
(
void
**
buffer
,
size_t
max
)
{
AndroidBacktraceState
state
=
{
buffer
,
buffer
+
max
};
_Unwind_Backtrace
(
android_unwind_callback
,
&
state
);
return
state
.
current
-
buffer
;
...
...
@@ -216,7 +220,7 @@ BacktraceResult mgb::debug::backtrace(int nr_exclude) {
recursive_call
=
true
;
BacktraceResult
result
;
#if
defined(__linux__) || defined(__APPLE
__)
#if
(defined(__linux__) || defined(__APPLE__)) && !defined(__ANDROID
__)
int
i
=
0
;
int
depth
=
::
backtrace
(
stack_mem
,
MAX_DEPTH
);
char
**
strs
=
backtrace_symbols
(
stack_mem
,
depth
);
...
...
@@ -268,6 +272,28 @@ BacktraceResult mgb::debug::backtrace(int nr_exclude) {
}
free
(
pSymbol
);
recursive_call
=
false
;
return
result
;
#elif defined(__ANDROID__)
size_t
idx
=
0
;
size_t
depth
=
android_backtrace
(
stack_mem
,
MAX_DEPTH
);
if
(
depth
>
static_cast
<
size_t
>
(
nr_exclude
))
idx
=
nr_exclude
;
for
(;
idx
<
depth
;
++
idx
)
{
std
::
ostringstream
frame_info
;
const
void
*
addr
=
stack_mem
[
idx
];
const
char
*
symbol
=
""
;
Dl_info
info
;
if
(
dladdr
(
addr
,
&
info
)
&&
info
.
dli_sname
)
{
symbol
=
info
.
dli_sname
;
}
frame_info
<<
" #"
<<
std
::
setw
(
2
)
<<
idx
<<
": "
<<
addr
<<
" "
<<
symbol
;
auto
frame
=
std
::
string
{
frame_info
.
str
().
c_str
()};
result
.
stack
.
emplace_back
(
frame
);
}
recursive_call
=
false
;
return
result
;
#else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录