Understand会把源码分析结果、实体关系、度量数据等内容保存在项目数据库中。创建项目时看到的.und项目位置,和Understand实际保存分析数据的位置并不一定完全相同,这一点很容易混淆。项目移动到其他磁盘后打不开、数据库版本不匹配、parse.udb出现异常时,也不建议直接覆盖原文件。先把现有项目保留下来,再判断是分析数据可以重建,还是整个.und项目都需要重新创建,会更容易保住原来的工程配置。
一、Understand怎么设置数据库保存位置
Understand项目主要涉及.und项目位置和分析数据位置。新建项目时可以直接指定.und保存目录,也可以让分析数据跟着项目一起保存,后面复制和备份会方便一些。
1、新建项目时设置.und保存目录
①打开Understand,点击【File】→【New】→【Project】。
②选择源码目录,完成语言和构建信息识别。
③进入【Set Location&Advanced Settings】。
④在项目名称位置填写当前工程名称。
⑤在【Location】中选择准备保存Understand项目的目录。
⑥不要把项目放到临时目录、构建缓存目录或者会被自动清理的位置。
⑦确认设置后完成项目创建。
⑧项目生成后检查指定目录中的【.und】项目。
.und在当前Understand版本中可以作为项目数据库路径使用,后续通过图形界面、und命令或Python API打开项目时,都要指向这一项目位置。
2、让分析数据保存在项目目录中
如果项目需要在不同电脑之间复制,或者希望备份时把分析数据一起带走,可以把分析数据放到项目内部。
①新建项目时进入【Set Location&Advanced Settings】。
②找到【Store analysis data in project folder】。
③启用该选项。
④完成项目创建并等待首次Analyze结束。
⑤打开项目所在的【.und】目录。
⑥检查其中是否已经生成【local】目录。
⑦后续备份时,把整个.und项目目录一起保存。
已有项目也可以在.und目录下建立名为【local】的空目录,让相关分析数据保存在项目目录中。修改这类存储方式后,建议重新分析一次项目,不继续依赖原来的旧分析缓存。
3、查看当前项目实际使用的数据位置
不确定数据库到底保存在哪里时,可以直接查项目信息。
①打开命令行。
②进入Understand的und命令可执行环境。
③执行【und projectinfo myproject.und】。
④把【myproject.und】替换成实际项目路径。
⑤查看返回的项目和内部数据位置。
⑥确认当前数据库是不是仍在用户Settings Folder下。
Understand没有使用项目内local目录时,部分分析数据会存放在用户设置目录。Windows环境常见位置位于用户AppData下的SciTools数据库目录,换电脑或修改用户设置目录后,这部分分析信息可能需要重新建立。
二、Understand数据库文件损坏后如何恢复
数据库打不开时,先保留损坏项目副本。Understand的源码分析数据库可以重新生成,源代码和项目配置还在的话,一般没有必要去手工修改parse.udb之类的内部文件。
1、先判断是数据库损坏还是版本不匹配
①关闭当前Understand项目。
②复制整个【.und】项目到单独备份目录。
③重新启动Understand,再打开原项目。
④如果提示数据库需要更新或版本不匹配,先记录当前Understand版本。
⑤使用命令行执行【und analyze myproject.und】。
⑥等待重新分析完成。
⑦重新打开项目,检查文件、函数和引用关系。
Understand数据库由不同版本打开时,可能因为数据库格式变化要求重新分析。这种情况和数据库真正损坏不是一回事,重新Analyze后能够打开,就不用重新建立项目。
2、项目配置还在时重建分析数据
项目能识别,但分析结果异常、函数关系大面积缺失时,可以先尝试重建分析数据。
①确认原始源码目录仍然存在。
②打开【Project】→【Configure Project】。
③检查【Files】中的源码路径。
④检查C/C++项目使用的Include目录和Macros。
⑤确认构建信息没有指向已经删除的位置。
⑥保存当前项目配置。
⑦执行完整Analyze,不只运行【Analyze Changed Files】。
⑧分析完成后重新检查函数、Metrics和调用关系。
如果只是parse分析信息损坏,重新读取源码并生成数据库通常比手工恢复内部数据库文件更稳妥。
3、.und项目本身无法读取时重新建库
Understand已经无法打开项目,命令行也提示数据库损坏时,可以用新数据库接管原来的源码和配置。
①保留损坏的【.und】项目,不执行删除或覆盖。
②查找以前导出的项目配置XML。
③新建一个空的【.und】项目。
④有配置备份时执行【und import settings.xml newProject.und】。
⑤没有配置备份时,在新项目中重新添加原源码目录。
⑥C/C++工程重新导入【compile_commands.json】或现有构建工程信息。
⑦检查Include、Macros、语言和文件范围。
⑧执行【und analyze newProject.und】重新建立分析数据库。
⑨打开新项目,核对源码文件数量、函数调用和度量结果。
项目配置可以提前用【und export settings.xml myProject.und】导出。数据库发生异常后,这份XML能省掉不少重新配置文件范围和分析选项的工作。
三、数据库恢复后怎么检查项目是否正常
数据库重新分析成功,只能说明项目已经能读写,还要检查源码路径和分析关系有没有一起恢复。特别是从旧项目重建新数据库后,Include、宏和外部源码路径少一项,都可能让分析结果和原项目不同。
1、检查源码和项目配置
①进入【Project】→【Configure Project】→【Files】。
②检查主要源码目录有没有全部加入。
③确认原来的排除目录没有被重新加入分析。
④打开【Improve Project Accuracy】查看缺失Include。
⑤检查Undefined Macros。
⑥C/C++工程重新核对实际构建使用的宏和头文件路径。
⑦修正后再次Analyze。
2、用已知代码关系验证数据库
①选择一个已经确认存在调用关系的函数。
②打开【Information Browser】。
③查看【Calls】是否能找到下级函数。
④再到被调用函数查看【Called By】。
⑤打开一个主要文件,检查Metrics数据。
⑥查看项目文件数量和原项目是否接近。
⑦确认这些基础结果正常后,再继续生成依赖图、调用图和度量报告。
3、给项目配置留一份可恢复备份
①项目配置稳定后执行【und export settings.xml myProject.und】。
②把【settings.xml】和源码版本对应保存。
③使用项目内分析数据时,把整个【.und】目录一起备份。
④项目升级Understand版本前,先保留旧数据库副本。
⑤源码目录发生迁移时,先处理项目路径,再重新Analyze。
⑥不要让多台机器同时写同一个Understand数据库,项目数据库不适合多用户同时写入。
总结
Understand数据库异常后,能重新生成的分析数据和需要保留的项目配置要分开看。源码、项目路径和分析设置还在时,重新分析或重新建立.und项目通常能够恢复代码关系和度量数据。项目平时保留一份配置备份,版本升级或磁盘迁移时也会省去不少重新配置工作。如需进一步了解Understand数据库管理、项目迁移与分析数据恢复方法,欢迎联系咨询。