【Tools】Visual Studio使用經驗介紹(包括基本功能、遠程調試、引入第三方庫等等)

這里寫目錄標題

  • 1. VS基本使用
      • 1.1. 快捷鍵
      • 1.2. 查看變量地址
      • 1.3. 查看代碼匯編
      • 1.4. visual studio 熱重載功能的使用
      • 1.5. vs遠程服務器調試
      • 1.6. 引入第三方庫VLD
      • 1.7. release debug模式

1. VS基本使用

1.1. 快捷鍵

ctrl + c :復制光標所在行    注意:只需要光標在這一行,不需要選中整行
ctrl + x : 剪切光標所在行  注意:只需將光標移至該行,不需要選中整行
ctrl + l(注意是L鍵) : 刪除光標所在行  注意:只需將光標移至該行,不需要選中整行
ctrl + k + c :注釋所選代碼或光標所在行   注意:先按k,再按c     或者 ctrl+k,ctrl+c
ctrl + k + u:取消注釋所選代碼或光標所在行   注意:先按k,再按u  或者 
ctrl shift / 快速注釋/取消注釋  
ctrl + f :在本文件中查找
CTRL+TAB :往前縮進Ctrl + M + O 折疊所有區域

1.2. 查看變量地址

1,查看變量地址,在變量處設置斷點,開始調試,右鍵變量->添加監視 點擊調試->窗口->添加內存

參考下面這篇鏈接
https://blog.csdn.net/weixin_48524215/article/details/120724278

1.3. 查看代碼匯編

調試的時候在這打開

1.4. visual studio 熱重載功能的使用

以在應用程序運行時進行代碼修改,并立即看到結果,而無需重新啟動應用程序或中斷調試會話。

選擇-文件保存時熱重載,文件保存一下就直接執行了。

1.5. vs遠程服務器調試

在這里插入圖片描述

參考下面這篇鏈接:
https://www.cnblogs.com/apocelipes/p/10899484.html

vs進行遠程開發分為兩步

  1. 創建遠程環境的連接,隨后讓vs將遠程環境中的系統頭文件同步到本地(也可以指定其他地方的頭文件,后面會講解),c++的代碼補全只需要頭文件即可。
  2. 當代碼寫好后,選擇合適的遠程環境,vs將目標文件和代碼復制到遠程環境的指定位置,接著根據你的配置進行編譯。
  3. 隨后vs將會在console的gdb或gdbserver中運行你的程序,在此期間你可以充分享受vs debugger帶來的高效和便利。

編譯一下

項目屬性:常規【遠程生成計算機、根目錄、項目目錄】

調試模式分gdb、gdbserver,前者讓VS在Linux上啟動一console,然后運行gdb并返回輸出【無法識別彩色輸出】
后者會遠程啟用 gdbserver,本地VS解析回傳的數據


接著是配置的重點,首先是配置需要同步的遠程環境的頭文件,有了這些文件vs才能對你的代碼進行自動補全和提示:

1.6. 引入第三方庫VLD

安裝過程:

Release v2.5.1 · KindDragon/vld

  1. vId下載后安裝一直點擊下一步,默認安裝位置即可;

此時環境變量等等都加到系統里去了,項目里直接#include"vId.h"就沒問題但是報錯:未識別的頭文件;

通常有以下幾種可能:

  1. VS 找不到頭文件 vId.h
  2. VS 找不到靜態庫 vId.lib
  3. VS 找不到動態庫 vId.dll(運行時報錯)
  4. VS 配置(x86/x64)和 vId 不匹配

2、那就手動添加這種第三方庫到vs里;添加過程如下:

  • (1)先找vId庫的頭文件

  • 將這個目錄添加到vs項目屬性:c/c++ ->常規->附加包含目錄 里;這樣做是告訴 VS 頭文件的路徑,否則 #include "vId.h" 會報錯。

  • (2)再找vId靜態庫;把靜態庫添加到下圖鏈接器里的附加庫目錄;因為編譯階段,C++ 代碼只知道 **vId.h** 里的函數聲明,但 不知道具體實現在哪。

  • (3)最后把第三方庫的動態庫加入到項目的Debug目錄下;**vId.dll** 是 動態庫,它的作用是 在程序運行時提供函數的實現。

  • 方法1: 找到 **vId.dll**,復制 **vId.dll** 到你的項目目錄

  • 方法2: 將 vId.dll 的路徑添加到 系統環境變量 PATH

  • 檢查 VS 項目配置(32 位 / 64 位) 必須和 **vId.lib** 的架構匹配

靜態庫(.lib)

  • 靜態庫是編譯時鏈接的:當你編譯你的程序時,靜態庫的代碼會直接嵌入到你的最終可執行文件(.exe)中。
  • 不需要運行時支持:你只要在編譯時正確鏈接靜態庫即可,運行時不需要額外的 .dll 文件。
  • 適用場景:當你想把所有代碼都嵌入到一個 .exe 文件中,避免依賴其他文件。

動態庫(.dll)

  • 動態庫是運行時鏈接的:動態庫的代碼不是直接嵌入到你的 .exe 文件中,而是在程序運行時動態加載。
  • 需要運行時支持:你需要確保 .dll 文件與 .exe 在同一目錄(Debug目錄下),或者 .dll 路徑被添加到系統環境變量 PATH 中。
  • 適用場景:當你想要讓多個程序共享同一個 .dll 文件,或者更新程序時只需要替換 .dll 文件。

**vId.lib** 是什么?

  • **vId.lib** 可能是 靜態庫導入庫(用于動態鏈接)。
  • 如果 **vId.lib** 是靜態庫,你可以直接將它鏈接到程序中,所有代碼都會被編譯進你的 .exe 文件中。
  • 如果 **vId.lib** 是導入庫(這里是這個),它僅僅是一個 指向 **vId.dll** 的鏈接,在編譯時用來將函數導入到程序中,但在運行時,程序會依賴 vId.dll 來執行實際的功能。

**vId.dll** 是什么?

  • **vId.dll** 是動態庫,它提供了運行時的實際功能。程序在運行時會 加載 **vId.dll** 來執行相關操作。
  • 如果 **vId.lib** 是導入庫,則 vId.dll必需的,否則程序會報錯,因為找不到 vId.dll 中的實現。

1.7. release debug模式

  1. Release 模式:
  • Release 模式用于生產環境中的最終產品。在這種模式下,編譯器通常會應用各種優化,以提高代碼的執行效率和減小最終可執行文件的大小。
  • 調試信息通常會被剝離,以減小可執行文件的大小,這樣在出現問題時可能會更難進行調試。
  • 代碼通常會被優化,以提高性能,但可能會使得調試時變量的值不太容易跟蹤。
  • 可執行文件通常會比 Debug 模式下的文件更快運行。
  1. Debug 模式:
  • Debug 模式用于開發和測試階段,目的是方便開發人員進行調試和定位問題。
  • 在 Debug 模式下,通常會保留調試信息,使得開發人員可以更輕松地進行調試,例如查看變量的值、跟蹤函數調用等。
  • 通常不會進行過多的優化,以便開發人員能夠更準確地觀察代碼的運行情況。
  • 可執行文件通常會比 Release 模式下的文件更大,因為包含了更多的調試信息

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

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

相關文章

網絡爬蟲學習之httpx的使用

開篇 本文整理自《Python3 網絡爬蟲實戰》,主要是httpx的使用。 筆記整理 使用urllib庫requests庫的使用,已經可以爬取絕大多數網站的數據,但對于某些網站依然無能為力。 這是因為這些網站強制使用HTTP/2.0協議訪問,這時urllib和r…

Python內存管理:賦值、淺拷貝與深拷貝解析

賦值與共享資源 在Python中,直接賦值操作(如 list2 list1)會導致兩個變量共享同一個內存地址。這意味著對 list1 的修改會直接影響到 list2,因為它們指向同一個對象。 注意: 賦值等于完全共享資源 如果我們不希望這樣完全共享&…

CentOS7原有磁盤擴容實戰記錄(LVM非LVM)【針對GPT分區】

一、環境 二、命令及含義 fdisk ????fdisk?是一個較老的分區表創建和管理工具,主要支持MBR(Master Boot Record)格式的分區表。MBR分區表支持的硬盤單個分區最大容量為2TB,最多可以有4個主分區。fdisk通過命令行界面進行操…

獲取相機圖像(ROS2)

文章目錄 前言一、獲取筆記本自帶相機圖像1.打開終端2.安裝usb-cam功能包3.啟動相機節點4.再打開一個終端5.啟動rqt查看圖像(1)方法一:點擊窗口選項,打開圖像話題(2)方法二:使用命令行,直接打開圖像話題 二、獲取USB相機圖像總結 …

Go 語言中接口類型轉換為具體類型

類型轉換方法 在 Go 語言中,將接口類型轉換為具體類型主要有以下幾種方法: 1. 類型斷言(Type Assertion) var i interface{} "hello"// 基本形式 s : i.(string) // 將接口i轉換為string類型 fmt.Println(s) // 輸…

ES C++客戶端安裝及使用

介紹 Elasticsearch , 簡稱 ES ,它是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful 風格接口,多數據源&…

力扣-94.二叉樹的中序遍歷

題目描述 給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 class Solution { public:void inorder(TreeNode* root, vector<int>& res){//C這里&一定要加if(!root)return;inorder(root->left,res);res.push_back(root->val);inorder(ro…

《大模型微調實戰:Llama 3.0全參數優化指南》

全參數微調&#xff08;Full Parameter Fine-Tuning&#xff09;是推動大模型適應垂直領域任務的核心技術&#xff0c;尤其對于Llama 3.0這類千億級參數模型而言&#xff0c;其性能優化與場景適配能力直接決定了實際應用價值。然而&#xff0c;全參數微調面臨計算成本高、內存占…

張 提示詞優化(相似計算模式)深度學習中的損失函數優化技巧

失函數的解釋 損失函數代碼解析 loss = -F.log_softmax(logits[

《Spring Boot 4.0新特性深度解析》

Spring Boot 4.0的發布標志著Java生態向云原生與開發效能革命的全面邁進。作為企業級應用開發的事實標準框架&#xff0c;此次升級在運行時性能、云原生支持、開發者體驗及生態兼容性四大維度實現突破性創新。本文深度解析其核心技術特性&#xff0c;涵蓋GraalVM原生鏡像支持、…

協作賦能-1-制造業生產流程重構

制造業生產流程重構——從“信息孤島”到“全鏈協同” 在制造業的數字化轉型浪潮中&#xff0c;一個看似矛盾的現象正在蔓延&#xff1a;企業部署了ERP、MES、PLM等管理系統&#xff0c;卻仍未擺脫“紙質工單滿天飛、跨部門扯皮不斷”的困境。以汽車制造業為例&#xff0c;其…

基于React的高德地圖api教程002:自定義地圖樣式

文章目錄 2、自定義地圖樣式2.1 自定義底圖樣式2.2 添加衛星地圖和路網圖2.3 完整代碼下載2、自定義地圖樣式 2.1 自定義底圖樣式 高德地圖提供了多種地圖樣式,對底圖進行設置,可選樣式如下圖所示: 添加地圖樣式切換控件: <div style={{marg

谷歌Gemini生圖升級:與GPT-4o的對決,誰更勝一籌?

在人工智能技術的快速發展中&#xff0c;圖像生成&#xff08;即“生圖”&#xff09;已經成為AI領域的一大熱點。谷歌最近對其多模態模型Gemini 2.0 Flash的生圖功能進行了升級&#xff0c;從之前的“實驗版”&#xff08;Gemini 2.0 Flash Experimental Image Generation&…

OpenAI官方指南,詳細解釋了何時使用哪種AI模型

&#xff08;1&#xff09;GPT-4o ? 日常任務專家&#xff1a;頭腦風暴/會議紀要/郵件撰寫/創意生成 ? 全模態支持&#xff1a;兼容GPTs插件/數據分析/圖像生成/畫布協作/高級語音等功能&#xff0c;支持文檔/圖片/CSV/音視頻等多格式輸入 【典型用例】 ? 將會議記錄提煉…

火山引擎發展方向

火山引擎作為字節跳動旗下的企業級技術服務平臺&#xff0c;要發展客戶需要結合自身技術優勢、行業趨勢和市場需求&#xff0c;制定差異化的策略。以下是一些關鍵方向和建議&#xff1a; --- ### **一、明確目標市場定位** 1. **聚焦核心賽道** - **泛互聯網行業**&…

在 Angular 中, `if...else if...else`

在 Angular 中&#xff0c;模板語法本身并不直接支持 if...else if...else 這樣的多條件分支結構。不過&#xff0c;你可以通過使用 *ngIf 指令結合其else模板功能來實現類似的效果。下面是如何模擬if...else if...else邏輯的方法&#xff1a; 示例&#xff1a;實現if...else …

利用Backtrader實現回測策略的可視化與圖表繪制

Plotting功能是Backtrader的一大特色,能夠幫助直觀地展示交易數據、策略表現等信息,為分析和優化交易策略提供有力支持。 (一)Backtrader的主要特點 靈活性:支持多種數據源和交易接口,用戶可以根據自己的需求靈活選擇。無論是股票、期貨、外匯等不同類型的金融市場數據,…

提升英文輸入效率:基于Docker的Qwerty Learner本地搭建與使用指南

文章目錄 前言1.關于qwerty-learner2.Docker部署3.簡單使用演示4.安裝cpolar內網穿透5. 配置公網地址6. 配置固定公網地址總結 前言 小伙伴們&#xff0c;你們有沒有遇到過這種情況&#xff1a;中文輸入流暢自如&#xff0c;一到英文模式就變成了新手司機&#xff1f;別擔心&a…

BUUCTF——shrine

BUUCTF——shrine 進入靶場 只有一串代碼 import flask import os app flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) #程序從環境變量 FLAG 讀取一個敏感值&#xff0c;并存儲在 app.config[FLAG] 中。 #安全問題&#xff1a;如果攻擊者能訪問 app.con…

【Python】對象生命周期全解析

Python對象生命周期全解析 在Python中&#xff0c;一個對象從創建到銷毀會經歷一系列過程&#xff0c;理解這些過程對于編寫高效、可靠的Python代碼非常重要。下面我將詳細講解Python對象的完整生命周期。 1. 對象創建階段 (1) 內存分配 當使用類實例化時(obj MyClass())&…