Understand通过项目数据库保存源码范围、语言类型、编译环境和分析配置。项目刚建立时,如果只把源码目录加进去,却没有把真实构建使用的头文件路径、宏定义和编译信息带进来,后面很容易出现文件识别不全、引用关系缺失或大量解析错误。另一类情况是原来能打开的项目换了电脑、移动源码目录或升级Understand后无法正常加载,这时要把项目数据库、源码路径和版本变化分开检查。
一、Understand怎么配置项目文件
创建项目时,可以直接指定源码目录,也可以读取Visual Studio、CMake等已有构建信息。C/C++项目更建议把真实编译参数一起导入,后面分析出来的函数调用、宏展开和类型关系会更接近原工程。
1、新建Understand项目并添加源码
①打开Understand,点击【File】→【New】→【Project】。
②进入【Where Is Your Source Code】后,点击【Browse】。
③选择项目源码的根目录,不要只选择其中一个src子目录。
④等待Understand扫描当前目录并识别语言与可导入的构建文件。
⑤进入【Summary of Project Languages】,检查【C/C++】【Java】【Python】等语言是否与当前项目一致。
⑥不参与本次分析的语言可以取消选择。
⑦进入【Set Location&Advanced Settings】,填写项目名称并设置保存位置。
⑧完成向导后,Understand会创建对应的.und项目数据库并开始分析源码。
项目文件建议放在源码树内或和源码保持固定的相对位置。后面移动整个项目时,路径关系不容易断开。
2、C/C++项目导入真实构建信息
项目使用CMake、Visual Studio等构建环境时,可以直接把编译信息带入Understand。
①在新建项目向导中等待源码扫描完成。
②发现【Visual Studio Solution】、【compile_commands.json】或其他支持的构建文件后,选择导入。
③使用CMake时,先确认构建目录中已经存在【compile_commands.json】。
④没有该文件时,可以重新执行CMake并开启【CMAKE_EXPORT_COMPILE_COMMANDS】。
⑤导入完成后打开【Project】→【Configure Project】。
⑥进入【C++】相关设置,检查编译器、Include路径和Macros。
⑦项目使用多个构建配置时,确认导入的是实际准备分析的Debug、Release或目标平台配置。
⑧保存后重新分析项目。
Strict分析依赖较完整的头文件和宏配置。构建信息缺失比较多时,代码本身没有编译错误,Understand里也可能出现不少未解析对象。
3、后续增加或移除项目文件
源码目录变化后,可以直接调整项目文件范围,不必重新建库。
①进入【Project】→【Configure Project】。
②打开【Files】。
③检查当前已经加入分析的目录和文件。
④新增源码目录时,把新的路径加入文件列表。
⑤不再参与分析的目录可以移除或排除。
⑥检查【File Types】,确认项目使用的特殊扩展名能够按正确语言处理。
⑦保存配置后执行【Analyze Changed Files】。
⑧源码变化较大时,可以重新执行完整分析。
命令行环境还可以使用【und add】添加文件或目录,再使用【und analyze】更新项目数据库。
二、Understand项目文件加载失败如何排查
.und项目打不开时,不要先删除项目重建。项目数据库和源码文件是两部分,数据库能找到,但它记录的源码路径已经失效,同样会表现为打开后大量文件丢失或重新分析失败。
1、检查.und项目和源码路径
①确认打开的是正确的【.und】项目,不要误选旧项目副本。
②检查项目所在磁盘和源码目录是否仍然存在。
③源码从D盘移动到E盘后,重点检查原项目记录的路径有没有失效。
④打开【Project】→【Configure Project】→【Files】,查看源码目录是否还能正常定位。
⑤目录显示无效时,把它重新指向当前源码位置。
⑥外部Include目录也发生变化时,进入语言配置重新修改对应路径。
⑦保存后重新执行项目分析。
如果项目需要在多台电脑之间使用,可以在创建阶段启用项目可移植设置,并用【Named Roots】处理项目目录之外的路径,减少机器目录结构不同带来的问题。
2、升级Understand后项目重新分析失败
旧版本创建的.und项目被新版本打开时,如果项目数据库格式发生变化,Understand可能会重新分析已有源码。
①打开【Help】→【About Understand】,记录当前Build版本。
②确认源码仍然位于原项目可以访问的位置。
③等待项目自动重新分析完成。
④重新分析出现大量错误时,进入【Project】→【Configure Project】检查语言、Include和Macros。
⑤命令行环境可以使用【und version-dbversion】查看项目数据库对应的版本信息。
⑥需要重新建立分析数据时,执行【und analyze】。
⑦不要在源码已经移动的情况下反复重分析,先把路径修好再处理数据库。
如果只是分析数据需要重建,原项目配置仍有保留价值,没有必要一看到重新分析就直接新建工程。
3、项目能打开但大量文件解析失败
这种情况属于项目已经加载,但分析配置没有和源码对上。
①打开分析结果,查看最前面出现的错误类型。
②缺少头文件时,进入【Project】→【Improve Project Accuracy】→【Missing Includes】。
③查看无法找到的头文件,并补充对应Include目录。
④大量宏未定义时,进入【Project】→【Improve Project Accuracy】→【Undefined Macros】。
⑤把原编译环境里的宏补进项目配置。
⑥C/C++工程使用CMake时,重新生成并导入【compile_commands.json】。
⑦修改完成后重新分析相关文件。
⑧检查之前的未解析函数、类型和引用关系是否已经恢复。
三、项目配置修改后怎么确认已经恢复
修完路径或分析参数后,可以从文件数量、解析错误和引用关系三个位置检查,不用一开始就把所有图表和指标都重新生成。
1、检查项目文件是否完整
①进入【Project】→【Configure Project】→【Files】。
②核对主要源码目录是否都已经存在。
③命令行环境可以执行【und list files】查看数据库中的文件列表。
④搜索几个主要.c、.cpp或.java文件,确认Understand能够打开源码。
⑤再检查外部头文件和公共库目录是否能正常定位。
2、重新分析并检查解析结果
①执行【Analyze Changed Files】更新修改过的源码。
②配置变化较大时执行完整Analyze。
③查看分析日志里的Missing Include和Undefined Macro数量。
④打开几个主要函数,检查【Calls】【Called By】等关系是否已经出现。
⑤再查看类型、变量和文件之间的引用。
⑥仍有集中报错时,从第一批同类错误继续修配置,不要逐条修改源码。
总结
Understand项目配置出了问题,常见影响通常集中在源码路径、构建参数和项目数据库版本这几个方面。项目能打开不代表分析已经正常,文件数量、解析错误和代码引用关系也要能和原工程对应。源码目录或开发环境发生调整时,把项目配置同步更新,可以减少后续重新分析时出现的大面积缺失。如需进一步了解Understand项目配置、源码分析与项目加载异常排查方法,欢迎联系咨询。