11.22 脚本 手机termux项目分析(bash)

输入,termux +一个脚本+一个文件即可

输出 :

#!/bin/bash

一键中文分析报告:调用树 + 符号列表,结果与源文件同目录

set -euo pipefail

1. 读文件(支持空格)

read -r -p "请输入要分析的 C 源文件路径(支持空格): " SRC

\[ -z "$SRC" ] && { echo "❌ 未输入路径,退出"; exit 1; }

SRC="${SRC%\"}"

SRC="${SRC#\"}"

\[ -f "$SRC" ] || { echo "❌ 文件不存在:$SRC"; exit 1; }

DIR=(dirname "SRC")

BASE=(basename "SRC" | sed 's/\.\^.*$//')

REPORT="DIR/{BASE}_分析报告.md"

2. 写报告头

cat > "$REPORT" <<EOF

${BASE} 中文分析报告

> 文件:\`$SRC\`

> 生成时间:$(date "+%Y-%m-%d %H:%M:%S")


一、函数调用关系

EOF

3. 生成调用树(带序号)

echo "🔄 生成调用树 ..."

if ! cflow "$SRC" 2>/dev/null | awk '

BEGIN{idx=1}

/^\^ \\t/{gsub(/<.*>/,"");gsub(/\(.*\)/,"");gsub(/^ \\t+| \\t+/,"");printf "%2d. %s\\n",idx++,0}

/^ \\t+/{gsub(/<.*>/,"");gsub(/\(.*\)/,"");gsub(/^ \\t+| \\t+/,"");printf " ├─ %s\\n",0}

' >> "$REPORT"; then

echo "⚠️ cflow 未安装或解析失败,已跳过调用树"

fi

4. 生成符号列表(中文归类,一行三列)

echo "🔄 生成符号列表 ..."

ctags --output-format=json \

--kinds-c=+c+d+e+f+g+l+m+n+p+s+t+u+v+x \

--kinds-c++=+c+d+e+f+g+l+m+n+p+s+t+u+v+x \

--fields=+iafkmnsSt \

--extras=+F+q+r \

"$SRC" 2>/dev/null \

| jq -r 'select(.name|startswith("__anon")|not)|(.kind+"\t"+.name)' \

| awk -v OFS="" '

BEGIN{

map"f"="函数"; map"p"="原型"; map"d"="宏定义"

map"s"="结构体"; map"u"="联合体"; map"e"="枚举"

map"g"="枚举值"; map"t"="类型"; map"v"="变量"

map"l"="局部"; map"h"="头文件"; map"x"="外部变量"

}

{

k=((1 in map)?map\[1]:1); list\[k\]=list\[k\] (list\[k\]?" ":"") 2

}

END{

print "\n---\n## 二、符号列表"

idx=0

for(k in list){

n=split(listk,arr," ")

printf "\n**%s**:\n",k

for(i=1;i<=n;i++){

idx++

printf " %2d. %-22s",idx,arri

if(i%3==0) printf "\n"

}

if(n%3) printf "\n"

}

}' >> "$REPORT"

echo "✅ 中文分析报告已生成:$REPORT"

相关推荐
JarvanMo1 分钟前
Flutter 3.50 & Dart 3.14发布,一起看看有哪些变化!
前端
青少儿编程课堂3 分钟前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
莪_幻尘15 分钟前
4 个 3D 游戏,总体积 3.82MB:拆解 Claude 的 one-shot 工程链路
前端·ai编程·three.js
Highcharts.js23 分钟前
Highcharts智能数据分析平台Orbit 多语言配置技术文档
java·前端·javascript·highcharts·orbit·智能数据分析·设置文档
用户03321266636728 分钟前
如何使用 Python 将 JSON 转换为 Excel
python·excel
小小张说故事33 分钟前
Python 的切片到底切了什么:拆开 slice 对象、负步长和 __getitem__
python
Zw-awa1 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
stm32
ABAP-張旺1 小时前
SAP ABAP 实战:SAP GUI上做 HTML 看板报表
前端·html·sap·abap
时间的情敌1 小时前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
IT_陈寒1 小时前
JavaScript项目实战经验分享:从内存泄漏到性能优化的血泪史
前端·人工智能·后端