Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
白晓明η
Docs
提交
b1622a77
D
Docs
项目概览
白晓明η
/
Docs
与 Fork 源项目一致
Fork自
OpenHarmony / Docs
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b1622a77
编写于
9月 23, 2022
作者:
O
openharmony_ci
提交者:
Gitee
9月 23, 2022
浏览文件
操作
浏览文件
下载
差异文件
!9781 Sanitizer选项使能说明
Merge pull request !9781 from lihehe/integer
上级
d7d6d0e3
db830849
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
90 addition
and
31 deletion
+90
-31
zh-cn/device-dev/subsystems/subsys-build-all.md
zh-cn/device-dev/subsystems/subsys-build-all.md
+1
-0
zh-cn/device-dev/subsystems/subsys-build-module.md
zh-cn/device-dev/subsystems/subsys-build-module.md
+44
-30
zh-cn/device-dev/subsystems/subsys-build-reference.md
zh-cn/device-dev/subsystems/subsys-build-reference.md
+45
-1
未找到文件。
zh-cn/device-dev/subsystems/subsys-build-all.md
浏览文件 @
b1622a77
...
...
@@ -337,6 +337,7 @@ optional arguments:
## 参考信息
-
[
关于deps、external_deps的使用
](
subsys-build-reference.md#关于deps、external_deps的使用
)
-
[
Sanitizer使用说明
](
subsys-build-reference.md#Sanitizer使用说明
)
-
[
开源软件Notice收集策略说明
](
subsys-build-reference.md#开源软件notice收集策略说明
)
-
[
加快本地编译的一些参数
](
subsys-build-reference.md#加快本地编译的一些参数
)
-
[
查看NinjaTrace
](
subsys-build-reference.md#查看ninjatrace
)
...
...
zh-cn/device-dev/subsystems/subsys-build-module.md
浏览文件 @
b1622a77
...
...
@@ -63,13 +63,16 @@ ohos_shared_library("helloworld") {
part_name
=
[
string]
# 必选,所属部件名称
output_dir
# Sanitizer variables
cfi
=
[
boolean]
scs
=
[
boolean]
scudo
=
[]
ubsan
=
[]
boundary_sanitize
=
[]
integer_overflow_sanitize
=
[]
# Sanitizer配置,每项都是可选的,默认为false/空
sanitize
=
{
# 各个Sanitizer开关
cfi
=
[
boolean]
integer_overflow
=
[
boolean]
...
debug
=
[
boolean]
# 调测模式
blocklist
=
[
string]
# 屏蔽名单路径
}
testonly
=
[
boolean]
license_as_sources
=
[]
...
...
@@ -104,13 +107,16 @@ ohos_static_library("helloworld") {
lib_dirs
=
[]
public_configs
=
[]
# Sanitizer variables
cfi
=
[
boolean]
scs
=
[
boolean]
scudo
=
[]
ubsan
=
[]
boundary_sanitize
=
[]
integer_overflow_sanitize
=
[]
# Sanitizer配置,每项都是可选的,默认为false/空
sanitize
=
{
# 各个Sanitizer开关
cfi
=
[
boolean]
integer_overflow
=
[
boolean]
...
debug
=
[
boolean]
# 调测模式
blocklist
=
[
string]
# 屏蔽名单路径
}
remove_configs
=
[]
no_default_deps
=
[]
...
...
@@ -136,13 +142,16 @@ ohos_executable("helloworld") {
ohos_test
=
[]
test_output_dir
=
[]
# Sanitizer variables
cfi
=
[
boolean]
scs
=
[
boolean]
scudo
=
[]
ubsan
=
[]
boundary_sanitize
=
[]
integer_overflow_sanitize
=
[]
# Sanitizer配置,每项都是可选的,默认为false/空
sanitize
=
{
# 各个Sanitizer开关
cfi
=
[
boolean]
integer_overflow
=
[
boolean]
...
debug
=
[
boolean]
# 调测模式
blocklist
=
[
string]
# 屏蔽名单路径
}
testonly
=
[
boolean]
license_as_sources
=
[]
...
...
@@ -179,13 +188,16 @@ ohos_source_set("helloworld") {
"part_name:module_name"
,
# 定义格式为 "部件名:模块名称"
]
# 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块
# Sanitizer variables
cfi
=
[
boolean]
scs
=
[
boolean]
scudo
=
[]
ubsan
=
[]
boundary_sanitize
=
[]
integer_overflow_sanitize
=
[]
# Sanitizer配置,每项都是可选的,默认为false/空
sanitize
=
{
# 各个Sanitizer开关
cfi
=
[
boolean]
integer_overflow
=
[
boolean]
...
debug
=
[
boolean]
# 调测模式
blocklist
=
[
string]
# 屏蔽名单路径
}
testonly
=
[
boolean]
license_as_sources
=
[]
...
...
@@ -198,7 +210,9 @@ ohos_source_set("helloworld") {
}
```
![
icon-note.gif
](
public_sys-resources/icon-note.gif
)
**注意**
:只有sources和part_name是必选,其他都是可选的。
![
icon-note.gif
](
public_sys-resources/icon-note.gif
)
**注意**
:
-
只有sources和part_name是必选,其他都是可选的;
-
Sanitizer配置详见:
[
Sanitizer使用说明
](
subsys-build-reference.md#Sanitizer使用说明
)
### 预编译模板示例
...
...
@@ -502,4 +516,4 @@ ohos_sa_profile("helloworld") {
```
shell
./build.sh
--product-name
hispark_taurus_standard
--build-target
musl
--build-target
模块名
--ccache
```
\ No newline at end of file
```
zh-cn/device-dev/subsystems/subsys-build-reference.md
浏览文件 @
b1622a77
...
...
@@ -62,6 +62,50 @@
!
[
icon-note.gif
](
public_sys-resources/icon-note.gif
)
**注意**
:部件间依赖要写在external_deps里面,格式为”部件名:模块名"的形式,并且依赖的模块必须是依赖的部件声明在inner_kits中的模块。
## Sanitizer使用说明
在添加模块时,可选地对该模块开启编译器提供的Sanitizer功能,包括整数溢出排错、控制流完整性检查等。配置的每一项都是可选的,如不指定默认为false或者空。Sanitizer配置示例如下所示:
```
shell
ohos_shared_library
(
"example"
)
{
sanitize
=
{
cfi
=
true
integer_overflow
=
true
debug
=
true
# 可选,调测模式,默认是不开启
blocklist
=
"./blocklist.txt"
# 可选,屏蔽名单路径
}
...
}
```
**支持的Sanitizer选项**
目前支持开启的Sanitizer:
-
整数溢出排错:unsigned_integer_overflow/signed_integer_overflow/integer_overflow(同时包括无符号和有符号整数溢出两种检查)
-
控制流完整性:cfi
**发布、调测模式**
通过
`debug`
选项控制使用发布模式还是调测模式,默认为发布模式,使用
`debug = true`
显式声明开启调测模式,在发布版本的编译中不带此选项。
-
调试模式:使用Sanitizer在开发时排查问题,与编译的debug版本无关。该模式下会输出产生错误相关的丰富信息来辅助定位错误,并且在发生错误后并不会直接中断程序运行,而是会恢复程序运行进一步识别后续的错误。
-
发布模式:保护程序发生错误或被恶意攻击,在产生错误后直接中断程序不会继续执行。
**屏蔽名单**
指定该模块中不受Sanitizer选项影响的函数或源程序文件名单,用于避免良性行为被识别为错误、热点函数产生了不合理、不可接受的开销;该名单需谨慎使用。名单示例如下所示:
```
[cfi]
fun:*([Tt]est|TEST)*
fun: main
[integer]
src:example/*.cpp
```
## 开源软件Notice收集策略说明
开源软件Notice是与项目开源相关的文件,收集这些文件的目的是为了符合开源的规范。
...
...
@@ -140,4 +184,4 @@ out/rk3568/.ninja_log文件记录了每个模块编译的开始和结束时间(m
CI上每个编译的输出里面有build.trace.html可直接打开,具体方法是:
1.
点击静态检查下的“成功”;
2.
点击输出列的“输出”即可在左侧的build_trace列看到build.trace.html文件,单击该文件即可打开。
\ No newline at end of file
2.
点击输出列的“输出”即可在左侧的build_trace列看到build.trace.html文件,单击该文件即可打开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录