<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=Debug%3Amm_track</id>
	<title>Debug:mm track - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://docs.bouffalolab.com/index.php?action=history&amp;feed=atom&amp;title=Debug%3Amm_track"/>
	<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Debug:mm_track&amp;action=history"/>
	<updated>2026-07-14T03:28:08Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://docs.bouffalolab.com/index.php?title=Debug:mm_track&amp;diff=307&amp;oldid=prev</id>
		<title>王扬搏：​创建页面，内容为“mm_track start [callsite_cap] [data_cap] [depth] [skip]  start命令会分配所需内存，第一次运行mm_track时，会默认以callsite_cap=1024，data_cap=4096，depth=5，skip=2来运行，其中callsite_cap代表可以存储的调用栈数量，data_cap代表可以存储的栈帧的数量（每个栈可能有多个栈帧），depth代表栈回溯时最大的回溯深度，skip代表栈回溯时跳过的栈帧（有可能前两级栈帧无意义）  mm_…”</title>
		<link rel="alternate" type="text/html" href="https://docs.bouffalolab.com/index.php?title=Debug:mm_track&amp;diff=307&amp;oldid=prev"/>
		<updated>2026-06-12T03:39:49Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“mm_track start [callsite_cap] [data_cap] [depth] [skip]  start命令会分配所需内存，第一次运行mm_track时，会默认以callsite_cap=1024，data_cap=4096，depth=5，skip=2来运行，其中callsite_cap代表可以存储的调用栈数量，data_cap代表可以存储的栈帧的数量（每个栈可能有多个栈帧），depth代表栈回溯时最大的回溯深度，skip代表栈回溯时跳过的栈帧（有可能前两级栈帧无意义）  mm_…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;mm_track start [callsite_cap] [data_cap] [depth] [skip]&lt;br /&gt;
&lt;br /&gt;
start命令会分配所需内存，第一次运行mm_track时，会默认以callsite_cap=1024，data_cap=4096，depth=5，skip=2来运行，其中callsite_cap代表可以存储的调用栈数量，data_cap代表可以存储的栈帧的数量（每个栈可能有多个栈帧），depth代表栈回溯时最大的回溯深度，skip代表栈回溯时跳过的栈帧（有可能前两级栈帧无意义）&lt;br /&gt;
&lt;br /&gt;
mm_track dump&lt;br /&gt;
&lt;br /&gt;
dump命令会打印记录的malloc申请点，与申请数，释放数，使用数。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&lt;br /&gt;
第一次执行时会以默认参数执行mm_track start 1024 4096 5 ：&lt;br /&gt;
&lt;br /&gt;
    bouffalolab /&amp;gt;mm_track&lt;br /&gt;
&lt;br /&gt;
    mm leak trace started: callsite=1024 data=4096 depth=5 skip=2&lt;br /&gt;
&lt;br /&gt;
    mm leak trace alloc bytes:&lt;br /&gt;
&lt;br /&gt;
      ctx: req_bytes=40&lt;br /&gt;
&lt;br /&gt;
      entry: cap=1024 item_size=12 req_bytes=12288&lt;br /&gt;
&lt;br /&gt;
      bt_data: cap=4096 item_size=4 req_bytes=16384&lt;br /&gt;
&lt;br /&gt;
      untracked: cap=256 item_size=4 req_bytes=1024&lt;br /&gt;
&lt;br /&gt;
      total_req_bytes=29736&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
之后可以执行业务，以wifi_scan为例，多次执行：&lt;br /&gt;
&lt;br /&gt;
    bouffalolab /&amp;gt;wifi_scan&lt;br /&gt;
&lt;br /&gt;
bouffalolab /&amp;gt;wifi_scan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
第二次即以后会默认执行mm_track dump：&lt;br /&gt;
&lt;br /&gt;
    bouffalolab /&amp;gt;mm_track&lt;br /&gt;
&lt;br /&gt;
    MM Leak Trace Report&lt;br /&gt;
&lt;br /&gt;
    state=started callsite_cap=1024/1024 data_cap=4096/4096 depth=5 skip=2&lt;br /&gt;
&lt;br /&gt;
    hash         malloc    free    used&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    0xa56f7f49        2        0       2&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    callsites=25 bt_entries=25 data_used=123/4096 dropped=0&lt;br /&gt;
&lt;br /&gt;
    used blocks=3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
发现0xa56f7f49 callsite有两块内存是used，有可能漏露，打印完整backtrace：&lt;br /&gt;
&lt;br /&gt;
    bouffalolab /&amp;gt;mm_track bt 0xa56f7f49&lt;br /&gt;
&lt;br /&gt;
    0xa0057156 0xa0039fec 0xa0008cee 0xa000feee 0xa0012760&lt;br /&gt;
&lt;br /&gt;
    matched bt entries: 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
使用addr2line工具打印backtrace的函数名字：&lt;br /&gt;
&lt;br /&gt;
    :~/repo/new0/bouffalo_sdk$ riscv64-unknown-elf-addr2line -e examples/wifi/sta/wifi_tcp/build/build_out/wifi_tcp_bl616.elf -f 0xa0057156 0xa0039fec 0xa0008cee 0xa000feee 0xa0012760&lt;br /&gt;
&lt;br /&gt;
    platform_malloc&lt;br /&gt;
&lt;br /&gt;
    ./examples/wifi/sta/wifi_tcp/build/build_out/components/wireless/wifi6/macsw_os_adapter/./components/wireless/wifi6/macsw_os_adapter/src/platform_bouffalo_sdk.c:104&lt;br /&gt;
&lt;br /&gt;
    macrx_upload&lt;br /&gt;
&lt;br /&gt;
    /home/wyb/repo/new0/bouffalo_sdk/components/wireless/xxxx.c:145&lt;br /&gt;
&lt;br /&gt;
    dma_upload&lt;br /&gt;
&lt;br /&gt;
    /home/wyb/repo/new0/bouffalo_sdk/components/wireless/xxxx.c:972&lt;br /&gt;
&lt;br /&gt;
    event_schedule&lt;br /&gt;
&lt;br /&gt;
    /home/wyb/repo/new0/bouffalo_sdk/components/wireless/xxxx.c:170 (discriminator 5)&lt;br /&gt;
&lt;br /&gt;
    event_loop&lt;br /&gt;
&lt;br /&gt;
    /home/wyb/repo/new0/bouffalo_sdk/components/wireless/xxxx.c:72&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
打开代码，检查相应的malloc是否没有相应的free。&lt;/div&gt;</summary>
		<author><name>王扬搏</name></author>
	</entry>
</feed>