调试工具管理
更新时间: 2025/12/15
在Gitcode上查看源码在开发调试过程中预置一些调试功能和工具通常是有意义的,如预置telnet、gdb等,本文描述openubmc如何管理这些功能。
一个组件化的构建架构需要考虑扩展性,能够轻松适配不同OS、不同编译器甚至不同的芯片。采用二进制引入工具绝对不是一个明智的选择,所有非产品类的调试功能或工具建议按如下方式管理。
工具也是一个组件
调试工具应该以可源码构建的conan组件形式引入,支持可源码构建、支持交叉编译、自动依赖管理、构建工具(make/cmake/gcc等知名且通用的除外)自管理特性,这样做可以明显的好处包括:
- 可追溯、可升级、支持交叉编译,为openubmc提供长期支持,广泛适用于各种场景,持续产生收益;
- 维护openubmc组件化通用的和解耦的架构,维护扩展性和灵活性。
功能有开关
融入业务组件中的调试功能应该以特性形式控制可见范围,控制方式一般是构建类型(debug/release),也可以根据需要扩展,不管如何都需要由conan包对外呈现特性开关,实现可控。
构建工程实现
构建工程已支持软件包(supportE发布包、toGDP生产装备包)级实现组件裁剪和特性裁剪。
同时,考虑调试功能、工具的可见范围需要基于 某些条件,只有满足特殊条件的软件包或特性才会引入工具或组件,构建工程为此需要扩展支持条件引入功能,并预置常用条件,如根据build_type要求控制引入条件,具体条件可以扩展。
以下是manifest.yml中编写条件引入 组件 和 特性 的示例:
yaml
dependencies:
- conan: "ssdp"
condition:
build_type: release
- conan: "muparser"
options:
shared: true
condition:
build_type: debug
- conan: "muparser"
options:
shared: false
condition:
build_type: release上述示例演示了:
- ssdp组件只在release条件下引入
- muparser组件在debug条件下使用shared动态库
- muparser组件在release条件下使用静态库
责任与分工
调试功能和工具的引入涉及构建工程和业务述求方,相关责任与分工:
- 构建工程提供扩展条件检查设计和实现,可为具体工具和功能编译构建提供指示。
- 调试工具和调试功能引入按谁痛谁主动原则确定,一般为业务述求方,需要完成组件的源码引入和功能实现。