# 模拟调试

由于模拟是在主机上运行的,因此可以使用所有桌面开发工具。

# CLANG 地址消毒器(Mac OS、Linux)

Clang 地址消毒器可帮助查找对齐(总线)错误和其他内存故障,如分段故障。下面的命令设置了正确的编译选项。

生产 清洗 # 仅在正常构建后首次运行地址消毒器时才需要
PX4_ASAN=1 生产 px4_sitl jmavsim

# Valgrind

安装 谷粒

苏都 apt-get 安装 谷粒

在 SITL 模拟期间使用 valgrind:

生产 px4_sitl_default jmavsim___valgrind

# 启动组合

SITL 可以在安装或未安装调试器的情况下启动,仿真后端可以是 jMAVSim 或 Gazebo。因此,启动选项如下:

生产 px4_sitl_default jmavsim
生产 px4_sitl_default jmavsim___gdb
生产 px4_sitl_default jmavsim___lldb

生产 px4_sitl_default 仿真场景Gazebo
生产 px4_sitl_default gazebo___gdb
生产 px4_sitl_default gazebo___lldb

其中最后一个参数是 <viewer_model_debugger>三元组(使用三个下划线表示默认的 "虹膜 "模型)。这将启动调试器并启动 SITL 应用程序。要进入调试器外壳并停止执行,请点击 CTRL-C:

过程 16529 停止 * 线程 #1: tid = 0x114e6d, 0x00007fff90f4430a libsystem_kernel.dylib`__read_nocancel + 10, name = 'px4', queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    画框 #0: 0x00007fff90f4430a libsystem_kernel.dylib`__read_nocancel + 10
libsystem_kernel.dylib`__read_nocancel: ->;  0x7fff90f4430a <;+10>;: jae 0x7fff90f44314            ; <;+20>;
    0x7fff90f4430c <;+12>;: movq %rax, %rdi 0x7fff90f4430f <;+15>;: jmp 0x7fff90f3fc53            ; cerror_nocancel 0x7fff90f44314 <;+20>;:retq
(lldb) 

为了不让驱动程序框架调度干扰调试会话 SIGCONT 应在 LLDB 和 GDB 中屏蔽:

(lldb) 进程句柄 SIGCONT -n 错误 -p 错误 -s 错误

或者以 GDB 为例:

(gdb) 处理 SIGCONT noprint nostop

之后,lldb 或 gdb shell 的行为与正常会话无异,请参阅 LLDB / GDB 文档。

最后一个参数,即查看器模型调试器三元组,实际上是传递给构建目录中的 make,因此

生产 px4_sitl_default jmavsim___gdb

等同于

生产 px4_sitl_default	# 使用 cmake 进行配置
生产 -C build/px4_sitl_default jmavsim___gdb

可以用以下命令获取构建目录中可用 make 目标的完整列表:

生产 帮助

但是,为了方便起见,可以使用以下命令打印出一个包含三胞胎的列表

生产 list_vmd_make_targets

# 编译器优化

可以抑制编译器对给定可执行文件和/或模块的优化(如 cmake 使用 添加可执行add_library)时,配置为 posix_sitl_*.这在需要使用调试器逐步检查代码或打印变量时非常方便,否则这些变量将被优化掉。

为此,请设置环境变量 px4_no_optimization 是一个以分号分隔的正则表达式列表,该列表与需要在不进行优化的情况下编译的目标相匹配。当配置不是 posix_sitl_*.

例如

出口 px4_no_optimization='px4;^modules__uORB;^modules__systemlib$'。

将抑制以下目标的优化:platforms__posix__px4_layer、modules__systemlib、modules__uORB、examples__px4_simple_app、modules__uORB__uORB_tests 和 px4。

可以使用该命令打印可以与这些正则表达式匹配的目标:

生产 -C build/posix_sitl_* list_cmake_targets