前言
之前简单介绍了groops的编译和环境配置,隔了好久才想起来继续写,今天写一下groops的调试,并用一个简单的小功能展示一下调试和项目构建的过程。
调试准备
GROOPS官方在windows利用msys2管理的MinGW-w64编译程序,在Linux下使用g++等工具。因此,GROOPS调试可以直接使用编译时使用的环境即可进行调试,不需要再新增别的环境。
官方的source文件夹内有现成的CMakeLists.txt,直接用VSCode+CMAKE或者CLion在source文件建立工程就能直接进行调试了。VSCode搭配CMAKE调试C++的教程很多,这里就不赘述了。
在Windows环境下。推荐使用编译时安装的msys2管理的MinGW环境,以CLion为例,将工具链路径设为msys2/mingw64的路径即可。VSCode将kits设置为对应的版本也没有问题。
项目构建
GROOPS通过XML文件来设置工程,详细说明可以参考官方文档(网络不稳定,有时需要魔法)。对XML比较熟练的话可以编辑XML文件,最简单的方法是使用官方的GUI程序,该程序通过界面的方式来进行工程设置,最后结果保存为XML文件。
在GUI中新建一个项目XML, 这里用定位定轨中用的地球定向参数(EOP)的格式转换为例,原始EOP文件可以从IERS官网获取。
参数类别中,global为全局变量,可以设置一些项目通用的属性,比如路径、时间等等,通过大括号来引用,这里我们设置一个路径方便后面填写。
program即为可调用的程序,绿色标志表示当前程序可用,灰色表示当前程序被禁用。GUI侧边第二栏提供了程序列表和说明,可以快速搜索选择。我们选择IersC04IAU2000EarthOrientationParameter程序将IERS格式的EOP转换为GROOPS自身的EOP格式
proram中需要设置各项参数,右上角有红色标志的为必填参数,此处为输入文件路径inputfile和输出文件路径outputfileEOP。输出文件根据GROOPS格式说明,可以选择三种文件:
后缀 | 文件类型 |
---|---|
.xml | XML格式文件 |
.dat | 二进制格式文件 |
.txt和其他后缀 | 文本格式文件 |
到这里,这个简单项目就基本配置好了,如果之前按照说明已经编译安装好了,点击绿色三角就可以直接运行了。也可以在命令行直接调用。
groops.exe EOPTrans_timeseries.xml
项目调试
如果选择Clion调试的话,直接配置参数就行了。使用VSCode的话,在./vscode下编辑launch.json文件:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) groops",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/groops.exe", //调试对象
"args": ["EOPTrans_timeseries.xml"], //程序实参
"stopAtEntry": false,
"cwd": "${workspaceFolder}/../scenarioLeoReducedDynamicOrbit", //工作目录
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb", //GDB工具路径
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
好了,做完上面这些就可以开始调试了。下面用Clion做演示。
GROOPS每一个程序功能都有对应的一组 .cpp 和 .h文件,并实现了一个与功能同名的类,成员函数 run( ) 为该程序功能的运行部分。在相应功能的 run() 中即可对该功能进行调试。
class IersC04IAU2000EarthOrientationParameter
{
public:
void run(Config &config, Parallel::CommunicatorPtr comm);
};
开始Debug,就能看到该功能运行的细节了,这样一个简单项目的调试就完成了。
总结
本次对GROOPS基本的调试和项目搭建进行了一个简单的介绍,之后根据官方给出的几个大型示例工程(低轨卫星简化动力学定轨、精密单点定位)再对GROOPS进一步演示。