一些平时遇到的bug总结

1./Users/UserName/Library/Developer/Xcode/DerivedData/xxx-beqfpakeslcfgjghvltweyjadfjk/Build/Intermediates/xxx.build/Debug-iphoneos/xxx.build/Script-B354780B144C8CA2002C6922.sh: line 4: /Developer/xcode-crack/gen_entitlements.py: No such file or directory

解决方法:Targets->Build Phases中删除Run Script
运行 问题解决


2. Could not change executable permissions on the application.

造成的原因是因为设备存在一个相同证书,这个时候只要删除设备上相同证书的应用,就可以了


3.linker command failed with exit code 1 (use -v to see invocation)

这个问题的解决方式是在Build Settings里面将 Build Active Architecture Only 设置为YES,这个参数设置代表是否根据代码自动设置SDK编译


4.libxml2.dylb  添加后  引用不了<libxml/tree.h>
XCODE ,  Project -> Edit Project Settings -> Build You need to add “/usr/include/libxml2″ to the “Header Search Paths” and you need to add “-lxml2″ to the “Other Linker Flags”.

5.如何解决“My mac 64-bit”问题

这种情况一般是从其他mac电脑copy过来项目造成的
解决方式:首先关闭xcode 然后在目录下会看到一个.xcodeproj后缀的文件,右键,显示包内容,然后删除里面xcuserdata的文件夹,重新启动xcode,就可以了

6.

“A valid provisioning profile for this executable was not found.”

在开发时真机测试遇到这个问题,原因是因为之前发布过应用,在target的code signing中的code signing identity已经置为iphone Distribution发布状态,改为iphone Developer就ok了。

7.

ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/tiantianyundong/Desktop/工程/traffic/traffic/classes/voice/VoiceConvert/lib/libopencore-amrnb.a for architecture armv7s

通过PROJECT-Build Setting,然后把Build Active Architecture Only的值设置为Yes。

<think>我们正在处理用户的问题:如何调试ROS2节点,特别是使用GDB捕获C++异常(如`std::length_error`)时出现的“not in executable format”和“No executable file specified”错误。 根据用户提供的信息,用户试图运行类似这样的命令: gdb -ex "catch throw" -ex run --args ros2 run <package> <node> 但遇到了GDB报错,提示无法识别可执行文件格式以及没有指定可执行文件。 原因分析: GDB需要直接调试一个可执行文件,但`ros2 run`命令实际上是一个Python脚本(位于`/usr/bin/ros2`),它最终会启动C++节点可执行文件。因此,我们不能直接将`ros2 run`作为GDB的参数。 解决方案: 1. 找到节点可执行文件的实际路径。 2. 直接使用该可执行文件路径进行GDB调试,并传递ROS2运行时的参数。 具体步骤: 步骤1:查找节点可执行文件的路径 使用以下命令查找可执行文件: ```bash which `ros2 pkg prefix <package_name>`/lib/<package_name>/<node_name> ``` 或者更简单的方式是,在运行`ros2 run <package> <node>`时,系统实际上会运行一个位于安装目录下的可执行文件。通常,这个路径的模式是: `install/<package>/lib/<package>/<node_name>` 例如,如果我们的包名为`imu_camera_sub`,节点名为`imu_camera_sub_node`,那么可执行文件路径可能是: `~/ros2_ws/install/imu_camera_sub/lib/imu_camera_sub/imu_camera_sub_node` 步骤2:使用GDB直接调试该可执行文件 然后,我们可以这样启动GDB: ```bash gdb -ex "catch throw" -ex run --args /path/to/executable [arguments] ``` 但是,节点通常需要一些ROS2特定的环境变量和参数。我们可以通过以下方式获取: 方法A:在运行节点之前,先source ROS2环境(如`source /opt/ros/humble/setup.bash`)以及工作空间(`source install/setup.bash`),然后直接运行GDB命令。 方法B:如果节点需要传递参数(例如通过`ros2 run`传递的参数),我们需要将这些参数也添加到GDB的命令行中。这些参数通常可以在启动文件或`ros2 run`命令中看到。 示例: 假设我们平时这样运行节点: ```bash ros2 run imu_camera_sub imu_camera_sub_node --ros-args -p some_parameter:=value ``` 那么使用GDB调试时,应该这样: ```bash gdb -ex "catch throw" -ex run --args /path/to/imu_camera_sub_node --ros-args -p some_parameter:=value ``` 步骤3:如果上述方法仍然遇到环境问题,我们可以先在一个终端中source环境,然后在同一个终端中运行GDB。 步骤4:如果节点依赖于其他环境(如自定义消息等),请确保在运行GDB之前已经编译了工作空间并source了setup文件。 补充:如果不知道可执行文件的具体路径,可以使用`which`或者查找文件的方式: ```bash # 首先source环境 source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash # 然后使用ROS2的命令查找可执行文件 ros2 pkg executables | grep imu_camera_sub ``` 该命令会输出包中所有可执行文件的路径。 步骤5:如果遇到“not in executable format”错误,可能是因为指定的文件不是一个可执行文件,或者架构不匹配(例如在x86系统上运行ARM二进制)。请确保路径正确且文件具有可执行权限。 步骤6:如果GDB提示“No executable file specified”,则说明GDB没有找到可执行文件。请检查路径是否正确,或者使用绝对路径。 示例完整命令: ```bash gdb -ex "catch throw" -ex run --args /home/user/ros2_ws/install/imu_camera_sub/lib/imu_camera_sub/imu_camera_sub_node ``` 如果节点需要参数,则加上参数。 另外,如果希望GDB在抛出异常时中断,我们可以使用`catch throw`,但注意这可能会捕获所有异常,包括C++标准库内部使用的异常。如果只需要捕获未处理的异常,可以在运行到main函数后再设置捕获。 替代方案:在运行节点后,使用GDB附加到进程 ```bash # 在一个终端中启动节点 ros2 run imu_camera_sub imu_camera_sub_node # 在另一个终端中查找进程ID ps aux | grep imu_camera_sub_node # 然后使用gdb附加 gdb --pid <pid> # 在GDB中设置捕获异常 (gdb) catch throw (gdb) continue ``` 但是,这种方法可能无法捕获到程序启动初期的异常。 总结:推荐使用直接调试可执行文件的方式。 现在,我们为用户提供具体的步骤: 1. 找到可执行文件路径: ```bash source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash # 替换为你的工作空间路径 ros2 pkg executables | grep imu_camera_sub ``` 2. 使用GDB运行该可执行文件(假设路径为`/home/user/ros2_ws/install/imu_camera_sub/lib/imu_camera_sub/imu_camera_sub_node`): ```bash gdb -ex "catch throw" -ex run --args /home/user/ros2_ws/install/imu_camera_sub/lib/imu_camera_sub/imu_camera_sub_node ``` 3. 如果节点需要参数,在`--args`后面加上参数。 如果用户不知道参数,可以查看原来的`ros2 run`命令后面跟的参数。 注意:如果可执行文件路径中包含空格或特殊字符,请用引号括起来。 如果用户仍然遇到问题,可能是由于环境变量缺失。在运行GDB之前,确保已经source了ROS2和工作空间的setup文件。 如果用户的工作空间没有安装(install)过,需要先编译: ```bash colcon build --packages-select imu_camera_sub ``` 最后,我们生成相关问题供用户参考。</think>### 解决ROS2节点调试中GDB报错"not in executable format"问题 当使用GDB调试ROS2节点(如`imu_camera_sub`)并捕获C++异常时,出现"not in executable format"和"No executable file specified"错误,通常是由于GDB未能正确识别ROS2节点的可执行文件格式或路径问题导致的。以下是逐步解决方案: --- #### 1. **确认可执行文件路径** 首先找到节点实际的可执行文件位置: ```bash # 查找节点包路径 ros2 pkg prefix imu_camera_sub # 进入lib目录查找可执行文件 cd $(ros2 pkg prefix imu_camera_sub)/lib/imu_camera_sub ls -la ``` #### 2. **正确加载可执行文件** 在GDB中直接指定节点二进制文件路径: ```bash # 格式:gdb --args <节点路径> [参数] gdb --args $(ros2 pkg prefix imu_camera_sub)/lib/imu_camera_sub/imu_camera_sub_node ``` #### 3. **设置GDB捕获异常** 在GDB中配置异常捕获: ```gdb (gdb) catch throw # 捕获所有C++异常 (gdb) run # 启动节点 ``` #### 4. **常见问题解决方案** | 错误类型 | 原因 | 解决方案 | |---------|------|----------| | **not in executable format** | 1. 文件权限不足<br>2. 架构不匹配<br>3. 文件损坏 | 1. `chmod +x <节点路径>`<br>2. 检查架构`file <节点路径>`<br>3. 重新编译节点 | | **No executable file specified** | GDB未加载可执行文件 | 1. 启动时指定路径`gdb <节点路径>`<br>2. 在GDB中用`file <节点路径>`加载 | | **调试符号缺失** | 未启用调试编译 | 在`CMakeLists.txt`添加:<br>`add_compile_options(-g)`<br>`set(CMAKE_BUILD_TYPE Debug)` | #### 5. **完整调试流程示例** ```bash # 步骤1: 定位节点路径 NODE_PATH=$(ros2 pkg prefix imu_camera_sub)/lib/imu_camera_sub/imu_camera_sub_node # 步骤2: 启动GDB gdb -ex "set pagination off" \ -ex "catch throw" \ -ex "run" \ --args $NODE_PATH # 步骤3: 当异常触发时 # 使用以下命令分析: # bt : 查看调用栈 # info args: 查看参数 # p <变量> : 打印变量值 ``` #### 6. **ROS2特定调试技巧 - **加载ROS环境**: ```bash source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash # 工作空间路径 ``` - **使用`ros2 run`包装**: ```bash gdb -ex run --args ros2 run imu_camera_sub imu_camera_sub_node ``` - **检查依赖库**: ```bash ldd $(ros2 pkg prefix imu_camera_sub)/lib/imu_camera_sub/imu_camera_sub_node ``` #### 7. **高级调试工具 - **安装调试增强工具**: ```bash sudo apt install ros-humble-rviz2-dbgsym # 替换为你的ROS版本 ``` - **使用`catch catch`命令**: ```gdb (gdb) catch catch # 捕获未被处理的异常 ``` > **关键提示**:如果遇到protobuf版本问题(如引用[3]所述),确保编译环境和运行环境的protoc版本一致: > ```bash > protoc --version # 检查版本 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值