diff --git a/ffmpeg.md b/ffmpeg.md index f263f04..d3341ae 100644 --- a/ffmpeg.md +++ b/ffmpeg.md @@ -69,9 +69,10 @@ sudo make install cd nv-codec-headers make sudo make install + # ./ffmpeg -hwaccels 查看支持哪些硬件编码 ``` -编译ffmeg arm64版本 +**编译ffmeg arm64版本** 在源码目录下创建buildarm64.sh,内容如下 diff --git a/gdb debug.md b/gdb debug.md new file mode 100644 index 0000000..368dc40 --- /dev/null +++ b/gdb debug.md @@ -0,0 +1,94 @@ + +## 使用gdb + +cmake加编译选项 +``` +add_compile_options(-g) +``` +- 一般情况 +``` +gdb ex run --args /path/to/exe/program +``` +- ros2 node +``` +ros2 run --prefix 'gdb -ex run --args' --all-other-launch arguments +``` +- nav2 launch file +``` +start_sync_slam_toolbox_node = Node( + parameters=[ + get_package_share_directory("slam_toolbox") + '/config/mapper_params_online_sync.yaml', + {'use_sim_time': use_sim_time} + ], + package='slam_toolbox', + executable='sync_slam_toolbox_node', + name='slam_toolbox', + prefix=['xterm -e gdb -ex run --args'], + output='screen') +``` +- nav2 bring up + +To debug directly from the nav2 bringup launch files you may want to do the following: + +- Add `prefix=['xterm -e gdb -ex run --args']` to the non-composed node in the appropriate launch file. + +- Recompile the package of interest with `-g` flag for debug symbols. + +- Launch normally with `ros2 launch nav2_bringup tb3_simulation_launch.py use_composition:=False`. A seperate xterm window will open with the proccess of intrest running in gdb. + +程序设置断点 +``` +__builtin_trap(); +``` +参数里面设置断点 +``` +prefix=['xterm -e gdb --eval-command="break nav2_behaviors::RequestGoals::inputCommandCallback" --eval-command="run" --args'], +``` + +## gdb功能大全 + +1. 设置断点:使用`break`命令在特定的源代码行或函数上设置断点。例如: + + - 在`file.cpp`的第10行设置断点:`break file.cpp:10` + - 在名为`my_function`的函数上设置断点:`break my_function` +2. 开始执行程序:使用`run`命令开始执行程序。程序将运行到遇到的第一个断点处。 + +3. 单步执行:在调试时,你可以使用以下命令单步执行代码: + + - `next`(或`n`):执行下一行代码,但不进入函数。 + - `step`(或`s`):执行下一行代码,如果是函数调用则进入函数。 +4. 查看变量值:使用`print`(或`p`)命令查看变量值。例如,`print variable_name`将显示`variable_name`的值。你还可以使用`display variable_name`命令,它会在每次停止时自动显示变量的值。 + +5. 继续执行:使用`continue`(或`c`)命令继续执行程序,直到遇到下一个断点或程序结束。 + +6. 查看栈帧:使用`frame`命令查看和切换栈帧。例如: + + - `frame`:显示当前栈帧。 + - `frame 2`:切换到第2个栈帧。 +7. 查看堆栈:使用`backtrace`(或`bt`)命令查看当前调用堆栈。 + +8. 查看源代码:使用`list`(或`l`)命令查看源代码。例如: + + - `list`:显示当前执行点附近的源代码。 + - `list file.cpp:10`:显示`file.cpp`第10行附近的源代码。 +9. 退出`gdb`:使用`quit`(或`q`)命令退出`gdb`。 + +## gdbinit + +在 Ubuntu 上,你可以通过创建一个 `.gdbinit` 文件来为 GDB 提供启动时的配置。`.gdbinit` 文件通常位于用户的主目录下。在这个文件中,你可以添加多个文件断点和函数断点。 + +首先,在你的主目录下创建 `.gdbinit` 文件(如果还没有的话): + +bashCopy code + +`touch ~/.gdbinit` + +然后,使用文本编辑器打开 `.gdbinit` 文件并添加你需要的断点。例如: + +kotlinCopy code + +`# 文件断点 break file1.cpp:123 break file2.cpp:456 # 函数断点 break my_function break my_namespace::my_class::my_method` + +在这个例子中,我们为 `file1.cpp` 的第 123 行和 `file2.cpp` 的第 456 行添加了文件断点。同时,我们还为 `my_function` 函数和 `my_namespace::my_class::my_method` 方法添加了函数断点。 + +请注意,你需要确保源代码中的文件和函数名称与 `.gdbinit` 文件中的名称完全匹配,否则 GDB 将无法找到它们并设置断点。 \ No newline at end of file