VSCode遠程圖形化GDB

VSCode遠程圖形化GDB

  • 摘要
  • 一、安裝VSCode
    • 1、使用.exe安裝包安裝VSCode
    • 2、VSCode 插件安裝
    • 3、VSCode建立遠程連接
  • 二、core dump找bug
    • 1、開啟core文件
    • 2、永久生效的方法
    • 3、編寫測試程序
    • 4、運行結果
    • 5、查看core段錯誤位置
    • 6、在程序中開啟core dump并二者core文件大小
  • 三、gdbserver
    • 1、[GDB移植](https://blog.csdn.net/weixin_38426553/article/details/126633280)
    • 2、VSCode遠程連接
    • 3、代碼編譯
  • 4、代碼調試
    • 4.1、修改launch.json文件
    • 4.2、gdbserver啟動
  • 四、客戶端命令行gdbserver調試
    • 1、在arm開發板啟動gdbserver
    • 2、在客戶端輸入命令
    • 3、開啟遠程連接
    • 4、打斷點
    • 5、c繼續運行,在斷點處停止
    • 6、打印參數
    • 7、其他功能
  • 總結

摘要

本文詳細介紹了如何在 Visual Studio Code (VSCode) 中實現遠程圖形化調試,使用 GDB 和 gdbserver 工具進行嵌入式開發中的程序調試。文章分為四個部分:首先介紹了 VSCode 的安裝和插件配置;其次講解了如何通過 core dump 文件定位程序中的錯誤;接著介紹了如何在嵌入式設備上使用 gdbserver 進行遠程調試;最后通過客戶端命令行展示了 gdbserver 的調試功能。通過本文,讀者可以掌握在 VSCode 中進行遠程調試的完整流程,包括環境搭建、調試配置和常見問題解決。

一、安裝VSCode

1、使用.exe安裝包安裝VSCode

2、VSCode 插件安裝

添加Remote SSH、Remote Development等插件

1)、C/C++,這個肯定是必須的。
2)、C/C++ Snippets,即 C/C++重用代碼塊。
3)、C/C++ Advanced Lint,即 C/C++靜態檢測 。
4)、Code Runner,即代碼運行。
5)、Include AutoComplete,即自動頭文件包含。
6)、Rainbow Brackets,彩虹花括號,有助于閱讀代碼。
7)、One Dark Pro,VSCode 的主題。
8)、GBKtoUTF8,將 GBK 轉換為 UTF8。
9)、ARM,即支持 ARM 匯編語法高亮顯示。Arm Assembly
10)、Chinese(Simplified),即中文環境。
11)、vscode-icons,VSCode 圖標插件,主要是資源管理器下各個文件夾的圖標。
12)、compareit,比較插件,可以用于比較兩個文件的差異。
13)、DeviceTree,設備樹語法插件。
14)、TabNine,一款 AI 自動補全插件,強烈推薦,誰用誰知道!
15)、Remote SSH
16)、Remote Development

(ARM替代,Arm Assembly更全)
設置語言環境:中文環境,安裝Chinese(Simplified)插件后會提示更換并重啟VSCode,或者去setting去設置locale.jsons設置"zh_cn"并重啟VSCode。

{// 定義 VS Code 的顯示語言。// 請參閱 https://go.microsoft.com/fwlink/?LinkId=761051,了解支持的語言列表。"locale":"zh-cn" // 更改將在重新啟動 VS Code 之后生效。
}

3、VSCode建立遠程連接

使用本地vscode的remote ssh 遠程鏈接服務器

二、core dump找bug

1、開啟core文件

root@ATK-IMX6U:/opt# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 2931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

第一行core文件大小為0,沒有開啟。
使用#ulimit -c [kbytes]可以設置系統允許生成的core文件大小;

ulimit -c 0 不產生core文件
ulimit -c 100 設置core文件最大為100k
ulimit -c unlimited 不限制core文件大小
root@ATK-IMX6U:/opt# ulimit -c unlimited
root@ATK-IMX6U:/opt# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 2931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2、永久生效的方法

這樣進程奔潰就可以生成core文件了,這種方法只能在shell中生效,下面說一下永久生效的方法
vi /etc/profile 進入編輯模式在文件最后加入:ulimit -c unlimited

root@ATK-IMX6U:/opt# vi /etc/profile
root@ATK-IMX6U:/opt# sync

3、編寫測試程序

 #include <stdio.h>#include <unistd.h>int main(int argc, char *argv[]){unsigned int timerCnt = 0;while(1) {printf("system runing times:%d\r\n", timerCnt);timerCnt++;int *p = NULL;int num = *p;sleep(1);}
}

4、運行結果

root@ATK-IMX6U:/opt# ./gdbApp
system runing times:0
Segmentation fault (core dumped)
root@ATK-IMX6U:/opt# ls
core  download.sh  gdbApp  GW_EVSE  IBG_AWS_Conn  logs  QDesktop  sqlite  src  volume.tmp
root@ATK-IMX6U:/opt# ls -l core
-rw------- 1 root root 344K Jul 21 23:14 core
root@ATK-IMX6U:/opt#

產生的core文件即為異常中止調試文件。

5、查看core段錯誤位置

將core文件拷貝到Ubuntu平臺上,和可自行文件放在同一個文件夾下,然后運行下面的命令:

/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb gdbApp core

運行結果:

leo@leo-virtual-machine:/mnt/hgfs/VMShare/TESTVSCODE$ /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb gdbApp core 
GNU gdb (GDB) 7.10.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-pokysdk-linux --target=arm-poky-linux-gnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
---Type <return> to continue, or q <return> to quit---y
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from gdbApp...done.
[New LWP 1577]warning: Could not load shared library symbols for 3 libraries, e.g. linux-vdso.so.1.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Core was generated by `./gdbApp'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00010494 in main (argc=1, argv=0x7edf5cd4) at gdbApp.c:14
14              int num = *p;
(gdb) 

運行結果來看,錯誤產生在14行,將空指針*p賦值給了num。

6、在程序中開啟core dump并二者core文件大小

#define CORE_DUMP_SIZE	1024*1024*500 //500M
#define CORE_DUMP_DEBUG 1#if CORE_DUMP_DEBUG/*設置core文件存儲上限,系統默認為0.用于段錯誤時堆棧信息記錄的操作,可以產生一個core文件*/struct rlimit rlmt;if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {return -1; }   rlmt.rlim_cur	= (rlim_t)CORE_DUMP_SIZE;rlmt.rlim_max	= (rlim_t)CORE_DUMP_SIZE;if (setrlimit(RLIMIT_CORE, &rlmt) == -1){return -1; }
#endif	

三、gdbserver

1、GDB移植

將Ubuntu上的交叉編譯器里面的gdbserver拷貝到開發板文件系統指定目錄/bin/

leo@leo-virtual-machine:~$ whereis gdbserver
gdbserver: /usr/bin/gdbserver /usr/local/arm_gcc/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/gdbserver /usr/share/man/man1/gdbserver.1.gz
leo@leo-virtual-machine:~$ 

在這里插入圖片描述

2、VSCode遠程連接

在這里插入圖片描述
在這里插入圖片描述

具體步驟可以百度:
設置.ssh config
在這里插入圖片描述

設置config文件

Host 192.168.3.116HostName 192.168.3.116Host 192.168.3.143HostName 192.168.3.143Port 22User rootHost 192.168.3.116HostName 192.168.3.116Port 22User leo

在這里插入圖片描述

server設置:
在這里插入圖片描述

輸入密碼連接
在這里插入圖片描述

3、代碼編譯

編譯代碼:修改Makefile,在gcc 后面加上 -ggdb選項

# -------------[ CFLAGS ] -------------
CFLAGS += -g
CFLAGS += -ggdb
CFLAGS += -Wall
CFLAGS += -I.
CFLAGS += -I $(TOPDIR)/api
CFLAGS += -I $(TOPDIR)/daemon
......

然后和以前一樣編譯代碼,這樣代碼編譯出來的可執行文件會更大一些,保留了調試信息在可執行文件中。

4、代碼調試

4.1、修改launch.json文件

點擊運行->啟動調試(或者按F5)。新的代碼未創建launch.json文件,選擇C++(GDB/LLDB),選擇默認配置會自動生成一個launch.json文件。
在這里插入圖片描述
在這里插入圖片描述

或者
或者點擊調試,選擇創建愛你launch.json文件。,選擇C++(GDB/LLDB)生成一個launch.json文件。
在這里插入圖片描述

修改launch.json文件

{// 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"type": "cppdbg","request": "launch","name": "(gdb)調試","program": "${workspaceFolder}/GW_EVSE","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath":"/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb",//"/usr/local/arm_gcc/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb","miDebuggerServerAddress": "192.168.3.143:2001","setupCommands": [{"description": "為 gdb 啟用整齊打印","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

注意交叉編譯器和可執行文件名稱需要修改。上面交叉編譯器有兩個,需要和編譯代碼的交叉編譯器對應上,否則程序不可執行,會段錯誤。

4.2、gdbserver啟動

將程序可執行文件下載到arm linux開發板后,執行

root@ATK-IMX6U:/opt# gdbserver 192.168.3.143:2001 GW_EVSE
Process gdbApp created; pid = 1629
Listening on port 2001

或者本機地址可以省略

root@ATK-IMX6U:/opt# gdbserver 3:2001 GW_EVSE
Process gdbApp created; pid = 1629
Listening on port 2001

然后在PC端VSCode啟動調試,就可以打斷點進行調試了
在這里插入圖片描述

四、客戶端命令行gdbserver調試

1、在arm開發板啟動gdbserver

root@ATK-IMX6U:/opt# gdbserver 192.168.3.143:2001 GW_EVSE
Process gdbApp created; pid = 1629
Listening on port 2001

2、在客戶端輸入命令

leo@leo-virtual-machine:/mnt/hgfs/VMShare/VSCodeWorkSpace/GW_EVSE$ /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb GW_EVSE
GNU gdb (GDB) 7.10.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-pokysdk-linux --target=arm-poky-linux-gnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from GW_EVSE...done.
(gdb)

3、開啟遠程連接

(gdb) target remote 192.168.3.143:2001
Remote debugging using 192.168.3.143:2001
Reading /lib/ld-linux-armhf.so.3 from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading symbols from target:/lib/ld-linux-armhf.so.3...Reading /lib/ld-2.23.so from remote target...
Reading /lib/.debug/ld-2.23.so from remote target...
(no debugging symbols found)...done.
0x76fcfac0 in ?? () from target:/lib/ld-linux-armhf.so.3
(gdb)

4、打斷點

(gdb) b 140
Breakpoint 1 at 0x1efac: file main/main_pro.c, line 140.
(gdb)

5、c繼續運行,在斷點處停止

(gdb) c
Continuing.
Reading /lib/librt.so.1 from remote target...
Reading /lib/libpthread.so.0 from remote target...
Reading /lib/libm.so.6 from remote target...
Reading /lib/libdl.so.2 from remote target...
Reading /lib/libc.so.6 from remote target...
Reading /lib/librt-2.23.so from remote target...
Reading /lib/.debug/librt-2.23.so from remote target...
Reading /lib/libpthread-2.23.so from remote target...
Reading /lib/.debug/libpthread-2.23.so from remote target...
Reading /lib/libm-2.23.so from remote target...
Reading /lib/.debug/libm-2.23.so from remote target...
Reading /lib/libdl-2.23.so from remote target...
Reading /lib/.debug/libdl-2.23.so from remote target...
Reading /lib/libc-2.23.so from remote target...
Reading /lib/.debug/libc-2.23.so from remote target...
[New Thread 1725]
[New Thread 1726]
[New Thread 1727]
[New Thread 1728]
[New Thread 1729]
[New Thread 1731]
[New Thread 1732]
[New Thread 1733]
[New Thread 1734]
[New Thread 1736]
[New Thread 1738]
[New Thread 1739]
[New Thread 1740]Breakpoint 1, main () at main/main_pro.c:140
warning: Source file is more recent than executable.
140                     if(cnt > 30)
(gdb)

6、打印參數

(gdb) r
The "remote" target does not support "run".  Try "help target" or "continue".
(gdb) c
Continuing.Breakpoint 1, main () at main/main_pro.c:140
140                     if(cnt > 30)
(gdb) c
Continuing.Breakpoint 1, main () at main/main_pro.c:140
140                     if(cnt > 30)
(gdb) print cnt
$1 = 3
(gdb)

從上面看出,遠程模式下,不支持全速運行 r 命令。

7、其他功能

這里不再贅述,可以查看操作手冊。

總結

本文為嵌入式開發人員提供了一套完整的 VSCode 遠程調試解決方案。通過安裝必要的插件和配置遠程連接,開發者可以在 VSCode 中方便地進行代碼編寫和調試。core dump 功能可以幫助快速定位程序崩潰的原因,而 gdbserver 則實現了遠程設備與本地調試環境的無縫連接。通過修改 launch.json 文件和正確配置交叉編譯器路徑,開發者可以在 VSCode 中輕松啟動和管理遠程調試會話。此外,文章還介紹了如何通過命令行使用 gdbserver 進行調試,進一步擴展了調試功能的靈活性。總之,本文為希望在 VSCode 中實現高效遠程調試的開發者提供了實用的指導和參考。

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

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

相關文章

Android 中實現 GIF 圖片動畫

在 Android 中&#xff0c;ImageView 從 Android 9.0&#xff08;API 級別 28&#xff09; 開始原生支持 GIF 動畫&#xff0c;通過 AnimatedImageDrawable 類實現。在之前的版本中&#xff0c;ImageView 并不支持直接播放 GIF 動畫&#xff0c;只能顯示 GIF 的第一幀。 一、 …

【c語言】指針進階

目錄 1.字符指針 2.指針數組 3.數組指針 3.1 數組指針的定義 3.2 數組指針的使用 4.數組參數&#xff0c;指針參數 4.1 一維數組傳參 4.2 二維數組傳參 4.3 一級指針傳參 4.4 二級指針傳參 5.函數指針 6.函數指針數組 6.1函數指針數組的定義 6.2 函數指針數組…

極狐GitLab 項目 API 的速率限制如何設置?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 項目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本&#xff0c;功能標志為rate_limit_for_unauthenticated_projects_api_…

【xlog日志文件】怎么刪除里面包含某些字符串的行(使用excel)

將log日志,復制到單獨一行 B列&#xff08;可能一行很長&#xff0c;所以將整合后的放在A列&#xff09; 使用公式可以篩選出 包含某些字符串的行 為true&#xff0c;將這些行直接刪除 IF(COUNT(FIND("MediaMuxterThreadRussia",B2,1))>0,"包含",&quo…

STM32提高篇: CAN通訊

STM32提高篇: CAN通訊 一.CAN通訊介紹1.物理層2.協議層二.STM32CAN外設1.CAN控制器的3種工作模式2.CAN控制器的3種測試模式3.功能框圖三.CAN的寄存器介紹1.環回靜默模式測試2.雙擊互發測試四.CAN的HAL代碼解讀一.CAN通訊介紹 CAN(Controller Area Network 控制器局域網,簡稱…

Java寫數據結構:棧

1.概念&#xff1a; 一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端稱為棧底。棧中的數據元素遵守后進先出LIFO&#xff08;Last In First Out&#xff09;的原則。 壓棧&#xff1a;棧的插…

單頁面應用的特點,什么是路由,VueRouter的下載,安裝和使用,路由的封裝抽離,聲明式導航的介紹和使用

文章目錄 一.什么是單頁面應用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重點)0.引出1.介紹2.下載與使用(5個基本步驟2個核心步驟)2.1 五個基本步驟2.2 兩個核心步驟 四.路由的封裝抽離五.聲明式導航1.導航鏈接特點一:能跳轉特點二:能高亮 2.兩個高亮類名2.1.區…

【C++】模板2.0

最近學習了一些模板的知識&#xff0c;速寫本博客作為學習筆記&#xff0c;若有興趣&#xff0c;歡迎垂閱讀&#xff01; 1.非類型模板參數 模板參數分類類型形參與非類型形參。 類型形參即&#xff1a;出現在模板參數列表中&#xff0c;跟在class或者typename之類的參數類型名…

目標檢測中的損失函數(二) | BIoU RIoU α-IoU

BIoU來自發表在2018年CVPR上的文章&#xff1a;《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 論文針對現有目標檢測方法只關注“足夠好”的定位&#xff0c;而非“最優”的框&#xff0c;提出了一種考慮定位質量的NMS策略和BIoU loss。 這里不贅…

如何在 Amazon EC2 上部署 Java(Spring Boot 版)

讓我們學習如何將 Java Spring Boot Web 服務器部署到 Amazon EC2。每月只需 3 美元。 使用 Azure&#xff0c;您可能不知道要花費多少錢。 Spring Boot 項目示例 在本教程中&#xff0c;我們將重點介紹如何將 Java Spring Boot 服務器部署到 Amazon EC2&#xff0c;因此我們不…

Git常用命令分類匯總

Git常用命令分類匯總 一、基礎操作 初始化倉庫git init添加文件到暫存區git add file_name # 添加單個文件 git add . # 添加所有修改提交更改git commit -m "提交描述"查看倉庫狀態git status二、分支管理 創建/切換分支git branch branch_name …

mysql——基礎知識

關鍵字大小寫不敏感 查看表結構中的 desc describe 描述 降序中的 desc descend 1. 數據庫的操作 1. 創建數據庫 create database 數據庫名;為防止創建的數據庫重復 CREATE DATABASE IF NOT EXISTS 數據庫名;手動設置數據庫采用的字符集 character set 字符集名;chars…

Redis 哨兵與集群腦裂問題詳解及解決方案

Redis 哨兵與集群腦裂問題詳解及解決方案 本文將深入探討Redis在哨兵模式和集群模式下可能出現的腦裂問題&#xff0c;包括其發生場景、原因以及有效的解決策略。同時&#xff0c;我們還將提供相應的代碼示例和配置方案來幫助讀者理解和實施。 一、腦裂問題概述 腦裂&#x…

國內網絡設備廠商名單(List of Domestic Network Equipment Manufacturers)

國內網絡設備廠商名單 運維工程師必須廣泛熟悉國內外各大廠商的設備&#xff0c;深入掌握其應用場景、功能特點及優勢。這不僅有助于在故障排查時迅速定位問題&#xff0c;還能在系統設計、優化與升級中做出更合理的決策。對設備特性的精準把握&#xff0c;能夠顯著提升運維效…

2、SpringAI接入ChatGPT與微服務整合

2、SpringAI接入ChatGPT與微服務整合 小薛博客AI 大模型資料 1、SpringAI簡介 https://spring.io/projects/spring-ai Spring AI是一個人工智能工程的應用框架。其目標是將Spring生態系統的設計原則&#xff08;如可移植性和模塊化設計&#xff09;應用于人工智能領域&#…

基于ubuntu24.10安裝NACOS2.5.1的簡介

基于ubuntu24.10安裝NACOS2.5.1的簡介 官方網站地址&#xff1a; https://nacos.io 可訪問nacos站點 https://nacos.io/zh-cn/ 2025年04月記錄發布 V2.5.1 版本 一、環境預準備 64 bit JDK 1.8&#xff1b; sudo apt update sudo apt install openjdk-8-jdk sudo apt upda…

神經網絡:從基礎到應用,開啟智能時代的大門

在當今數字化時代&#xff0c;神經網絡已經成為人工智能領域最熱門的技術之一。從語音識別到圖像分類&#xff0c;從自然語言處理到自動駕駛&#xff0c;神經網絡的應用無處不在。它不僅改變了我們的生活方式&#xff0c;還為各個行業帶來了前所未有的變革。本文將帶你深入了解…

[k8s實戰]Containerd 1.7.2 離線安裝與配置全指南(生產級優化)

[k8s實戰]Containerd 1.7.2 離線安裝與配置全指南&#xff08;生產級優化&#xff09; 摘要&#xff1a;本文詳細講解在無外網環境下部署 Containerd 1.7.2 容器運行時的完整流程&#xff0c;涵蓋二進制包安裝、私有鏡像倉庫配置、Systemd服務集成等關鍵步驟&#xff0c;并提供…

【CPU】結合RISC-V CPU架構回答中斷系統的7個問題(個人草稿)

結合RISC-V CPU架構對中斷系統七個關鍵問題的詳細解析&#xff0c;按照由淺入深的結構進行說明&#xff1a; 一、中斷請求機制&#xff08;問題①&#xff09; 硬件基礎&#xff1a; RISC-V通過CLINT&#xff08;Core Local Interrupter&#xff09;和PLIC&#xff08;Platfor…

[密碼學實戰]國密算法面試題解析及應用

以下是密碼學領域常見的面試題及其詳細解析,涵蓋基礎理論、算法實現與應用場景,幫助系統化備戰技術面試 一、基礎概念類 1. 密碼學的主要目標是什么? 答案: 確保數據的機密性(加密防止竊聽)、完整性(哈希校驗防篡改)、認證性(數字簽名驗證身份)和不可否認性(簽名防…