Skip to content

Commit

Permalink
doc: add doc to show how to use profiling and code coverage functions
Browse files Browse the repository at this point in the history
  • Loading branch information
shuzhuo committed Aug 16, 2024
1 parent e945b0b commit f256e81
Show file tree
Hide file tree
Showing 21 changed files with 401 additions and 16 deletions.
66 changes: 53 additions & 13 deletions 16-incomplete_data_output_when_using_profiling_function.md
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,27 +1,67 @@
# 使用Profiling功能时数据输出不完整
# 使用Profiling功能时可能遇到的一些问题

## 问题说明
目前使用 Profiling 功能可能遇到一些问题,记录如下:
* **问题1**:日志打印中报片上内存不足,没有充足空间存放 gprof/gcov 数据
* **问题2**:采用串口输出的方式收集数据,打印被冲掉,Console 或 Terminal 收集的数据不全,导致数据解析失败,不能生成`gmon.out`文件或者`*.gcno`文件
* **问题3**:删掉 `gmon.out` 文件,再次解析时,弹出 No files have been generated 错误弹框

在NucleiStudio 2024.06中,当选择使用串口输出的方式使用Profiling功能时,可能存在最终结果不及预期。
### 问题1:日志打印中报片上内存不足,没有充足空间存放 gprof/gcov 数据

![](asserts/images/16-1.png)
gprof/gcov data 需要存到片上内存上,需要占用片上内存空间(几十到几百KB不等),占用内存的大小与用例规模有关,需要确保片上内存足够大。

在使用`Parse and Generate Hexdump`时没有生成对应的`gmon.out`文件或者`*.gcno`文件,是因为在Console或者Terminal中,对输出的内容条数有限制,当输出的内容长度超过限制时,前面的内容会丢失。
![Alt text](asserts/images/16/overflow.png)

![](asserts/images/16-2.png)

![](asserts/images/16-3.png)

### 解决方案

首先需要确认软件配置的内存大小与硬件实际大小相匹配(ilm/sram/flash/ddr/),可以使用内存大一点的下载方式(如 `DOWNLOAD=ddr`)。

## 解决方案
修改软件配置的内存大小,与硬件实际大小相匹配:
比如,如果是 `DOWNLOAD=ilm` 模式下载,可以按硬件的 ilm 与 dlm 大小适配。
对于 nuclei sdk 0.6.0 版本,修改的文件为`nuclei-sdk/SoC/evalsoc/Board/nuclei_fpga_eval/Source/GCC/gcc_evalsoc_ilm.ld`

为了更方便的使用Profiling功能,可以将Console和Terminal中对输出内容的上限做修改。
~~~c
INCLUDE evalsoc.memory

建议将Console中输出内容条限修改为不受限制。
MEMORY
{
ilm (rxa!w) : ORIGIN = ILM_MEMORY_BASE, LENGTH = ILM_MEMORY_SIZE
ram (wxa!r) : ORIGIN = DLM_MEMORY_BASE, LENGTH = DLM_MEMORY_SIZE
}
~~~

![](asserts/images/16-4.png)
### 问题2:Console 或 Terminal 收集的数据不全导致数据解析时失败

建议将Terminal中输出内容条限修改为一个较大的值。
在 NucleiStudio 2024.06 中,当选择使用串口输出的方式使用 Profiling 功能时,可能遇到在使用 `Parse and Generate Hexdump` 解析数据时时没有生成对应的 `gmon.out` 文件或者 `*.gcno` 文件。这可能是因为串口数据被冲掉,导致数据不完整,从而解析失败
![generated_fail](asserts/images/16/generated_fail.png)

![](asserts/images/16-5.png)
确认方法:需确保串口打印开始时的打印没有被冲掉,参考[一个例子用来展示Profiling以及Code coverage功能](17-an_example_to_demonstrate_the_use_of_profiling_and_code_coverage.md)

![parse_profiling_fail](asserts/images/16/parse_profiling_fail.png)

### 解决方案
因为在Console或者Terminal中,对输出的内容条数有限制,当输出的内容长度超过限制时,前面的内容会被冲掉,导致内容不完整,这样会解析失败。

需要调节 Console 或 Terminal 输出大小限制,确保数据没有被冲掉。为了更方便的使用 Profiling 功能,可以将 Console 和 Terminal 中对输出内容的上限做修改。

* 建议将Console中输出内容条限修改为不受限制。
Window->Preference 进入如下界面:
![config_console_limit](asserts/images/16/config_console_limit.png)

* 建议将Terminal中输出内容条限修改为一个较大的值。
Window->Preference 进入如下界面:
![config_terminal_limit](asserts/images/16/config_terminal_limit.png)



### 问题3:删掉 gmon.out 文件,再次解析,弹出 No files have been generated 错误弹框

手动删掉工程文件夹下的 gmon.out 文件,再次解析时出现 `No files have been generated` 的错误弹框

![generated_fail](asserts/images/16/generated_fail.png)

### 解决方案

手动删掉 gmon.out 文件后,需要手动刷新一下工程。
![refresh_project](asserts/images/16/refresh_project.png)
Loading

0 comments on commit f256e81

Please sign in to comment.