vscode中Debug c++

在vscode中Debug ros c++程序

1 Debug模式編譯

如果用命令行catkin_make,在輸入catkin_make時加上一個參數:

catkin_make -DCMAKE_BUILD_TYPE=Debug

或者直接修改CMakelist.txt,添加以下代碼:

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

2 編寫launch文件

?rosrun package node?改為roslaunch package xxx.launch

3 vscode?debug配置

"version": "0.2.0","configurations": [{"name": "ROS: Launch","type": "ros","request": "launch","target": "/home/aaa/mycompany/15weeding/infer/yolov8/yolov8_ws_4/src/instance_seg/launch/instance_seg.launch"},

4 Debug

打斷點

啟動roscore,點擊綠色三角

調試方法

一種是調試coredump文件,另一種是在線調試。

大多使用在線調試,而在線調試又分為 roslaunch 調試和 rosrun node調試

使用gdb命令行在線調試

1安裝xterm

sudo apt install xterm

2 Debug模式編譯

如果用命令行catkin_make,在輸入catkin_make時加上一個參數:

catkin_make -DCMAKE_BUILD_TYPE=Debug

或者直接修改CMakelist.txt,添加以下代碼:

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

launch文件添加GDB調試指令

在node標簽中添加參數

launch-prefix="xterm -e gdb -ex run --args"

<launch>

????<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" ?launch-prefix="xterm -e gdb -ex run --args"/>

????<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />

</launch>

The launch-prefix attribute of the tag that, among other things, makes it easy to debug a ROS node process. Here are some example launch-prefixes you might find useful:

launch-prefix=“xterm -e gdb --args” : run your node in a gdb in a separate xterm window, manually type run to start it

launch-prefix=“gdb -ex run --args” : run your node in gdb in the same xterm as your launch without having to type run to start it

launch-prefix=“stterm -g 200x60 -e gdb -ex run --args” : run your node in gdb in a new stterm window without having to type run to start it

launch-prefix=“valgrind” : run your node in valgrind

這個valgrind工具可以用于檢測內存泄露,并執行性能分析

launch-prefix=“xterm -e” : run your node in a separate xterm window

launch-prefix=“nice” : nice your process to lower its CPU usage

launch-prefix=“screen -d -m gdb --args” : useful if the node is being run on another machine; you can then ssh to that machine and do screen -D -R to see the gdb session

launch-prefix=“xterm -e python -m pdb” : run your python node a separate xterm window in pdb for debugging; manually type run to start it

rosrun node 的方式進行調試

rosrun --prefix 'gdb -ex run --args' ?[package_name] ?[node_name]

gdb core dump 調試

????????在Linux下可通過core文件來獲取當程序異常退出(如異常信號SIGSEGV, SIGABRT等)時的堆棧信息。core dump叫做核心轉儲,當程序運行過程中發生異常的那一刻的一個內存快照,操作系統在程序發生異常而異常在進程內部又沒有被捕獲的情況下,會把進程此刻內存、寄存器狀態、運行堆棧等信息轉儲保存在一個core文件里,叫core dump。core文件是程序非法執行后core dump后產生的文件,該文件是二進制文件,可以使用gdb、elfdump、objdump打開分析里面的具體內容。

產生core dump的可能原因:

(1)??內存訪問越界;

(2) 多線程程序使用了線程不安全的函數;

(3) 多線程讀寫的數據未加鎖保護;

?(4) 非法指針;

?(5) 堆棧溢出。

Debug模式編譯

如果用命令行catkin_make,在輸入catkin_make時加上一個參數:

catkin_make -DCMAKE_BUILD_TYPE=Debug

或者直接修改CMakelist.txt,添加以下代碼:

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

1、查看core dump是否打開,如果返回0代表沒有打開,返回 unlimited 表示已經打開

ulimit -c

2、打開core dump

ulimit -c?unlimited

執行這行命令之后,只針對當前終端有效。

如果想對所有終端都有效則在 .bashrc 末尾添加這行代碼:

ulimit -c?unlimited

3、生成可執行文件,要加-g選項,以獲取到具體的行號信息,否則沒有

g++ -g -o main main.c

4、執行程序后生成core文件,core文件默認放在可執行文件相同目錄下,且文件名固定為core

./main

5、使用gdb調試core

gdb main core

6、查看程序堆棧信息

bt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ROS2】 核心概念6——通信接口語法(Interfaces)

古月21講/2.6_通信接口 官方文檔&#xff1a;Interfaces — ROS 2 Documentation: Humble documentation 官方接口代碼實戰&#xff1a;https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Single-Package-Define-And-Use-Interface.html ROS 2使用簡化的描…

C#里與嵌入式系統W5500網絡通訊(2)

在嵌入式代碼里,需要從嵌入式的MCU訪問W5500芯片。 這個是通過SPI通訊來實現的,所以要先連接SPI的硬件通訊線路。 接著下來,就是怎么樣訪問這個芯片了。 要訪問這個芯片,需要通過SPI來發送數據,而發送數據又要有一定的約定格式, 于是芯片廠商就定義下面的通訊格式: …

SuperYOLO:多模態遙感圖像中的超分辨率輔助目標檢測之論文閱讀

摘要 在遙感影像&#xff08;RSI&#xff09;中&#xff0c;準確且及時地檢測包含數十像素的多尺度小目標仍具有挑戰性。現有大多數方法主要通過設計復雜的深度神經網絡來學習目標與背景的區分特征&#xff0c;常導致計算量過大。本文提出一種兼顧檢測精度與計算代價的快速準確…

計算機軟件的基本組成

計算機軟件的基本組成 一, 計算機軟件的分類 軟件按其功能分類, 可分為系統軟件和應用軟件 圖解 (1)系統軟件 系統軟件是一組保證計算機系統高效, 正確運行的基礎軟件, 軟件通常作為系統資源提供給用戶使用. 系統軟件主要有操作系統(OS), 數據庫管理系統(DBMS), 語言處理程…

unity開發游戲實現角色篩選預覽

RenderTexture通俗解釋 RenderTexture就像是Unity中的"虛擬相機膠片"&#xff0c;它可以&#xff1a; 捕獲3D內容&#xff1a;將3D場景或對象"拍照"記錄下來 實時更新&#xff1a;不是靜態圖片&#xff0c;而是動態視頻&#xff0c;角色可以動起來 用作…

Spring源碼主線全鏈路拆解:從啟動到關閉的完整生命周期

Spring源碼主線全鏈路拆解&#xff1a;從啟動到關閉的完整生命周期 一文看懂 Spring 框架從啟動到銷毀的主線流程&#xff0c;結合原理、源碼路徑與偽代碼三位一體&#xff0c;系統學習 Spring 底層機制。 1. 啟動入口與環境準備 原理說明 Spring Boot 應用入口是標準 Java 應…

SAP RF 移動屏幕定制

SAP RF 移動屏幕定制 ITSmobile 是 SAP 當前將移動設備連接到 SAP 系統的技術基礎。它基于 SAP Internet Transaction Server (ITS)&#xff0c;從 Netweaver 2004 開始作為 Netweaver 平臺的一部分提供。ITSmobile 提供了一個框架&#xff0c;用于為任何 SAP 事務生成基于 HT…

Spark,數據提取和保存

以下是使用 Spark 進行數據提取&#xff08;讀取&#xff09;和保存&#xff08;寫入&#xff09;的常見場景及代碼示例&#xff08;基于 Scala/Java/Python&#xff0c;不含圖片操作&#xff09;&#xff1a; 一、數據提取&#xff08;讀取&#xff09; 1. 讀取文件數據&a…

如何用mockito+junit測試代碼

Mockito 是一個流行的 Java 模擬測試框架&#xff0c;用于創建和管理測試中的模擬對象(mock objects)。它可以幫助開發者編寫干凈、可維護的單元測試&#xff0c;特別是在需要隔離被測組件與其他依賴項時。 目錄 核心概念 1. 模擬對象(Mock Objects) 2. 打樁(Stubbing) 3. 驗…

最新缺陷檢測模型:EPSC-YOLO(YOLOV9改進)

目錄 引言:工業缺陷檢測的挑戰與突破 一、EPSC-YOLO整體架構解析 二、核心模塊技術解析 1. EMA多尺度注意力模塊:讓模型"看得更全面" 2. PyConv金字塔卷積:多尺度特征提取利器 3. CISBA模塊:通道-空間注意力再進化 4. Soft-NMS:更智能的重疊框處理 三、實…

【Linux網絡與網絡編程】12.NAT技術內網穿透代理服務

1. NAT技術 之前我們說到過 IPv4 協議中IP 地址數量不充足的問題可以使用 NAT 技術來解決。還提到過本地主機向公網中的一個服務器發起了一個網絡請求&#xff0c;服務器是怎么將應答返回到該本地主機呢&#xff1f;&#xff08;如何進行內網轉發&#xff1f;&#xff09; 這就…

uniapp的適配方式

文章目錄 前言? 一、核心適配方式對比&#x1f4cf; 二、rpx 單位&#xff1a;uni-app 的核心適配機制&#x1f9f1; 三、默認設計稿適配&#xff08;750寬&#xff09;&#x1f501; 四、字體 & 屏幕密度適配&#x1f6e0; 五、特殊平臺適配&#xff08;底部安全區、劉海…

JAVA EE(進階)_進階的開端

別放棄浸透淚水的昨天&#xff0c;晨光已為明天掀開新篇 ——陳長生. ?主頁&#xff1a;陳長生.-CSDN博客? &#x1f4d5;上一篇&#xff1a;JAVA EE_HTTP-CSDN博客 1.什么是Java EE Java EE&#xff08;Java Pla…

SQL腳本規范

主要作用&#xff1a;數據庫的備份和遷移 SQL腳本規范 每一個sql語句必須與;結束 腳本結構&#xff1a; { 刪庫&#xff0c;建庫 刪表&#xff0c;建表 插入初始數據 } 建庫語法&#xff1a; CREATE DATABASE 數據庫名CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CHARA…

std::ratio<1,1000> 是什么意思?

author: hjjdebug date: 2025年 05月 14日 星期三 09:45:24 CST description: std::ratio<1,1000> 是什么意思&#xff1f; 文章目錄 1. 它是一種數值嗎&#xff1f;2. 它是一種類型嗎&#xff1f;3. std:ratio 是什么呢&#xff1f;4. 分析一個展開后的模板函數5.小結: …

測試--測試分類 (白盒 黑盒 單元 集成)

一、按照測試目標分類&#xff08;測試目的是什么&#xff09; 主類別細分說明1. 界面測試UI內容完整性、一致性、準確性、友好性&#xff0c;布局排版合理性&#xff0c;控件可用性等2. 功能測試檢查軟件功能是否符合需求說明書&#xff0c;常用黑盒方法&#xff1a;邊界值、…

整理了 2009 - 2025 年的【199 管綜真題 + 解析】PDF,全套共 34 份文件

每年真題原卷 ? 每年詳細解析 ? &#x1f4c2;【管綜真題 2009-2025】 &#x1f4c2;【管綜解析 2009-2025】 目錄樹&#xff1a; ├── 2009-2025管綜真題 PDF │ ├── 2009年199管綜真題.pdf │ ├── 2010年199管綜真題.pdf │ ├── 2011年199管綜真題.pd…

用golang實現二叉搜索樹(BST)

目錄 一、概念、性質二、二叉搜索樹的實現1. 結構2. 查找3. 插入4. 刪除5. 中序遍歷 中序前驅/后繼結點 一、概念、性質 二叉搜索樹&#xff08;Binary Search Tree&#xff09;&#xff0c;簡寫BST&#xff0c;又稱為二叉查找樹 它滿足&#xff1a; 空樹是一顆二叉搜索樹對…

自動化:批量文件重命名

自動化&#xff1a;批量文件重命名 1、前言 2、效果圖 3、源碼 一、前言 今天來分享一款好玩的自動化腳&#xff1a;批量文件重命名 有時候呢&#xff0c;你的文件被下載下來文件名都是亂七八糟毫無規律&#xff0c;但是當時你下載的時候沒辦法重名或者你又不想另存為重新重…

VueUse/Core:提升Vue開發效率的實用工具庫

文章目錄 引言什么是VueUse/Core&#xff1f;為什么選擇VueUse/Core&#xff1f;核心功能詳解1. 狀態管理2. 元素操作3. 實用工具函數4. 瀏覽器API封裝5. 傳感器相關 實戰示例&#xff1a;構建一個拖拽上傳組件性能優化技巧與原生實現對比常見問題解答總結 引言 在現代前端開發…