调试Dynaslam: Ubuntu系统下使用VS Code进行自动化调试Dynaslam的教程,包括tasks.json和launch.json的配置

news2024/11/20 7:22:26

调试Dynaslam: Ubuntu系统下使用VS Code进行自动化调试Dynaslam的教程,包括tasks.json和launch.json的配置

修改CMakeLists.txt文件

  1. SET(CMAKE_BUILD_TYPE Release)修改为SET(CMAKE_BUILD_TYPE Debug)
  2. 不开启编译优化,在编译选项中包含 -g 参数来启用调试符号,使调试器能够准确地设置断点和跟踪代码。
IF(NOT CMAKE_BUILD_TYPE)
#   SET(CMAKE_BUILD_TYPE Release)
  SET(CMAKE_BUILD_TYPE Debug)
ENDIF()

MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})

# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 ")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
# -Wall: 这是一个编译选项,表示开启所有警告信息。-W 表示开启警告,all 表示开启所有警告。
# -O3: 这是另一个编译选项,表示开启优化级别 3。-O 表示开启优化,3 表示优化级别。

修改build.sh文件

cmake .. -DCMAKE_BUILD_TYPE=Release替换为cmake -DCMAKE_BUILD_TYPE=Debug ..

echo "Configuring and building DynaSLAM ..."

mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j4

同时,将DynaSLAM/Thirdparty/DBoW2/CMakeLists.txtDynaSLAM/Thirdparty/g2o/CMakeLists.txt中的cmake .. -DCMAKE_BUILD_TYPE=Release替换为cmake -DCMAKE_BUILD_TYPE=Debug ..

创建 c_cpp_properties.json 文件

组合快捷键Ctrl+Shift+P输入C/C++: Edit Configurations (JSON)确定,就会进入一个新的名为c_cpp_properties.json的文件编辑状态,我的内容如下:

{
    "configurations": [
        {
            "name": "Linux", // 配置的名称,可以根据需要进行更改
            "includePath": [
                "${default}", // 默认的包含路径,根据平台自动设置
                "/usr/include/python2.7", // Python 2.7 头文件路径
                "${workspaceFolder}", // 工作区根目录
                "${workspaceFolder}/include", // 自定义的头文件路径,根据实际情况进行修改
                "/usr/include/eigen3" // Eigen3 头文件路径
            ],
            "defines": [], // 定义的宏,根据需要进行设置
            "compilerPath": "/usr/bin/gcc", // C 编译器路径,根据实际情况进行修改
            "cStandard": "c17", // C 语言标准版本,根据需要进行修改
            "cppStandard": "gnu++14", // C++ 语言标准版本,根据需要进行修改
            "intelliSenseMode": "linux-gcc-x64", // IntelliSense 模式,根据平台和编译器进行设置
            "configurationProvider": "ms-vscode.cmake-tools" // 配置提供程序,用于集成 CMake 工具
        }
    ],
    "version": 4 // 配置文件版本号
}
  • ​ 这个配置文件用于为Visual Studio Code的C/C++扩展提供编译器IntelliSense功能。通过指定包含路径、编译器路径、语言标准等信息,它可以帮助编辑器提供准确的代码补全、语法检查等功能。IntelliSense是一种代码编辑器的功能,可以提供代码补全、语法检查、函数签名提示等功能,帮助开发者更高效地编写代码。
  • ​ 通过配置c_cpp_properties.json文件,您可以指定编译器的路径、包含文件的路径、宏定义、编译选项以及语言标准等信息。这些信息将被用于IntelliSense功能,使其能够正确地解析和分析您的代码,并提供相应的补全和提示。
  • ​ 例如,您可以在includePath字段中指定头文件的搜索路径,这样IntelliSense就能够正确地找到和解析这些头文件中的定义。您还可以在defines字段中添加宏定义,以便IntelliSense可以根据定义的宏来提供准确的代码补全和语法检查。
  • ​ 通过正确配置c_cpp_properties.json文件,您可以提高代码编写的效率和准确性,以及获得更好的开发体验。

创建tasks.json文件

组合快捷键Ctrl+Shift+P输入Tasks: Configure Default Build Task,创建一个新的名为tasks.json的文件编辑状态,填入如下内容.

{
	"version": "2.0.0",
	"tasks": [
	  {
		"label": "Build DynaSLAM",     // 任务的标签,用于在其他配置中引用该任务
		"type": "shell",               // 任务类型为shell,表示运行Shell命令
		"command": "sh",               // 执行的命令为sh,即运行Shell脚本
		"args": ["build.sh"],          // 传递给Shell脚本的参数
		"group": {                     // 任务组配置
		  "kind": "build",             // 任务组类型为build,用于将任务标记为构建任务
		  "isDefault": true            // 该任务组为默认任务组
		},
		"presentation": {              // 任务展示配置
		  "echo": true,                // 在输出面板显示任务执行的命令和输出
		  "reveal": "always",          // 在执行任务时始终展开输出面板
		  "focus": false,              // 任务执行时不将焦点切换到输出面板
		  "panel": "shared",           // 在共享面板中展示任务输出
		  "showReuseMessage": true,    // 显示任务输出时是否显示任务已重用的消息
		  "clear": false               // 不在任务执行前清除输出面板
		}
	  }
	]
  }
  /* 这个tasks.json文件定义了一个名为"Build DynaSLAM"的任务,该任务将运行一个Shell脚本文件build.sh。
  任务被标记为构建任务,并设置为默认任务组。在任务执行期间,输出面板将显示任务执行的命令和输出,
  输出面板始终展开,但不会将焦点切换到输出面板。任务的输出将显示在共享面板中,并显示任务已重用的消息。
  在任务执行之前不会清除输出面板上的内容。
  
你可以根据自己的项目需求调整和修改这个tasks.json文件。
确保将任务的命令和参数设置为正确的构建命令和参数,以适应你的项目。 */

创建Debug用的launch.json文件

组合快捷键Ctrl+Shift+D 下拉选择添加配置...->选择C++(GDB/LLDB),就会进入一个新的名为launch.json的文件编辑状态,文件如下:
请修改为自己的路径

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",//"name"属性指定配置的名称
            "type": "cppdbg",//"type"属性指定调试类型
            "request": "launch",//"request"属性指定调试请求类型(例如启动或附加到进程)
            // "program": "${workspaceFolder}/src/Yolact_SLAM_SemanticMap/Examples/RGB-D/rgbd_tum",
            "program": "/home/cgm/DynaSLAM/Examples/RGB-D/rgbd_tum",//"program"属性指定要调试的可执行文件路径
            "args": [
                "/home/cgm/DynaSLAM/Vocabulary/ORBvoc.txt",
                "/home/cgm/DynaSLAM/Examples/RGB-D/TUM3.yaml",
                "/home/cgm/DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy",
                "/home/cgm/DynaSLAM/Examples/RGB-D/associations/fr3_walking_rpy.txt",
                "/home/cgm/DynaSLAM/results/f3_wrpy_mask222",
                "/home/cgm/DynaSLAM/results/f3_wrpy_imOut222"
  
            ],//"args"属性指定传递给程序的命令行参数
            "stopAtEntry": false,//"stopAtEntry"属性指定是否在程序入口点停止
            // "cwd": "${fileDirname}",
            "cwd": "${workspaceFolder}",//"cwd"属性指定工作目录
            // "environment": [{"name": "PATH", "value": "${env:PATH}:/home/cgm/anaconda3/envs/Yolact/bin"}], //这个不行,找不到conda环境
            "environment": [{"name": "PATH", "value": "/home/cgm/anaconda3/envs/MASKRCNN/bin:${env:PATH}"}], //"environment"属性指定要设置的环境变量
            "externalConsole": false,//"externalConsole"属性指定是否在外部控制台中运行程序
            "MIMode": "gdb",//"MIMode"属性指定要使用的调试器类型
            // 在launch.json文件中,将preLaunchTask参数值设置为我们的任务标签"Build DynaSLAM",即:
            "preLaunchTask": "Build DynaSLAM", // 设置 preLaunchTask 参数值
            /* preLaunchTask设置为"Build DynaSLAM"任务的标签意味着在启动调试之前会自动运行名为"Build DynaSLAM"的任务。
            这个任务定义在tasks.json文件中,它负责构建Dynaslam代码。
            通过将preLaunchTask与构建任务关联起来,你可以确保在开始调试之前代码已经成功编译,并且调试器可以直接开始调试过程。
            因此,通过在launch.json文件中设置preLaunchTask属性并指定对应的任务标签,
            你可以确保在启动调试会话之前先运行必要的构建任务,以便为调试过程做好准备。这样可以提高调试的效率和准确性。 */
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]//"setupCommands"属性指定要在启动调试器之前发送的GDB命令。
  }
  
    ]
  }

注意preLaunchTask,这个就是ubuntu下使用vscode对c++程序进行自动化调试的关键设置

            "preLaunchTask": "Build DynaSLAM", // 设置 preLaunchTask 参数值
            /* preLaunchTask设置为"Build DynaSLAM"任务的标签意味着在启动调试之前会自动运行名为"Build DynaSLAM"的任务。
            这个任务定义在tasks.json文件中,它负责构建Dynaslam代码。
            通过将preLaunchTask与构建任务关联起来,你可以确保在开始调试之前代码已经成功编译,并且调试器可以直接开始调试过程。
            因此,通过在launch.json文件中设置preLaunchTask属性并指定对应的任务标签,
            你可以确保在启动调试会话之前先运行必要的构建任务,以便为调试过程做好准备。这样可以提高调试的效率和准确性。 */

测试运行

  • 现在就可以用组合快捷键Ctrl+Shift+B先编译项目.

Ctrl+Shift+B是Visual Studio Code中的快捷键,用于执行任务(Tasks)。通过使用Ctrl+Shift+B,您可以快速运行预定义的任务,例如构建项目、运行测试等。

上述提供的tasks.json文件定义了一个名为"Build DynaSLAM"的任务,该任务使用Shell命令运行build.sh脚本。当您按下Ctrl+Shift+B时,Visual Studio Code将执行此任务,并在输出面板中显示任务的命令和输出。

通过使用Ctrl+Shift+B执行任务,您可以快速构建Dynaslam代码,而无需手动打开终端并输入命令。这提高了您的开发效率,并使构建过程更加方便。

请注意,您可以根据需要修改tasks.json文件中的任务配置,以适应您的项目需求。确保将命令和参数设置为正确的构建命令和参数,以确保任务能够成功执行。

用组合快捷键Ctrl+Shift+B后终端显示如下信息:

 *  正在执行任务: sh build.sh 

Configuring and building Thirdparty/DBoW2 ...
mkdir: 无法创建目录 “build”: 文件已存在
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/Thirdparty/DBoW2/build
[100%] Built target DBoW2
Configuring and building Thirdparty/g2o ...
mkdir: 无法创建目录 “build”: 文件已存在
-- BUILD TYPE:Debug
-- Compiling on Unix
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/Thirdparty/g2o/build
[100%] Built target g2o
Uncompress vocabulary ...
Configuring and building DynaSLAM ...
mkdir: 无法创建目录 “build”: 文件已存在
Build type: Debug
-- Using flag -std=c++11.
PROJECT_SOURCE_DIR: /usr/local/opencv2.4.11/share/OpenCV
-- Python library status:
--     executable: 
--     version: 
--     libraries: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
--     library: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
--     include path: /usr/include/python3.8

PYTHON LIBS were found!
PYTHON LIBS DIRECTORY: /home/cgm/anaconda3/envs/MaskRCNN/lib/libpython2.7.so
Boost was found!
Boost Headers DIRECTORY: /usr/include
Boost LIBS DIRECTORY: /usr/lib/x86_64-linux-gnu
Found Libraries: Boost::thread
PROJECT_SOURCE_DIR: /home/cgm/DynaSLAM
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cgm/DynaSLAM/build
[ 92%] Built target DynaSLAM
[100%] Built target rgbd_tum
 *  终端将被任务重用,按任意键关闭。 
  • F9在源文件里下断点,F5运行 GDB 调试.
    在这里插入图片描述
    直接按下F5键会根据launch.json文件中的配置启动调试会话,并根据指定的设置执行所需的操作,例如构建代码(ctrl+shift+B的操作)、设置环境变量和启动目标程序进行调试。

Vscode调试时监视Mat数据

(float*)(matDepthCurrentFrame.data),10

(float*)(mask.data),10
  • 在监视窗口中,点击加号"+“按钮或右键点击空白处,选择"Add Expression”(添加表达式)。
  • 在输入框中输入表达式(float*)(mask.data),10,然后按回车键。
  • 监视窗口将显示表达式的值,并且你可以在每次程序停止时更新该值。

表达式(float*)(mask.data),10将强制将mask.data解释为float*类型的指针,并获取该指针的前10个元素的值
在这里插入图片描述

RuntimeError: _ARRAY_API is not PyCObject object

首先我的CMakeLists.txt文件:

# CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake:$CMAKE_PREFIX_PATH
# export CMAKE_PREFIX_PATH

echo "Configuring and building Thirdparty/DBoW2 ........"

cd Thirdparty/DBoW2
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j

cd ../../g2o

echo "Configuring and building Thirdparty/g2o .........."

mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j

cd ../../../

echo "Uncompress vocabulary ........."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building DynaSLAM ........."

mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j


cd ..
# 调试时,不要打开下面的运行命令!!!不然会出现错误RuntimeError: _ARRAY_API is not PyCObject object
# 调试时,不要打开下面的运行命令!!!不然会出现错误RuntimeError: _ARRAY_API is not PyCObject object
# 调试时,不要打开下面的运行命令!!!不然会出现错误RuntimeError: _ARRAY_API is not PyCObject object
# 调试时,不要打开下面的运行命令!!!不然会出现错误RuntimeError: _ARRAY_API is not PyCObject object

#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt /home/cgm/DynaSLAM/results/f3_wxyz_mask /home/cgm/DynaSLAM/results/f3_wxyz_imOut
#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt
#./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_xyz/ Examples/RGB-D/associations/fr3_walking_xyz.txt /home/cgm/DynaSLAM/results/mask
# ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222
 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222 > run_out.txt 2>&1

# conda activate MASKRCNN
# conda activate maskrcnn

这个错误是因为我有时直接./build.sh运行Dynaslam,有时又是调试,而调试的launch.json已经有参数了,而调试时CMakeLists.txt中的命令行参数没有注释掉!

            "program": "/home/cgm/DynaSLAM/Examples/RGB-D/rgbd_tum",//"program"属性指定要调试的可执行文件路径
            "args": [
                "/home/cgm/DynaSLAM/Vocabulary/ORBvoc.txt",
                "/home/cgm/DynaSLAM/Examples/RGB-D/TUM3.yaml",
                "/home/cgm/DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy",
                "/home/cgm/DynaSLAM/Examples/RGB-D/associations/fr3_walking_rpy.txt",
                "/home/cgm/DynaSLAM/results/f3_wrpy_mask222",
                "/home/cgm/DynaSLAM/results/f3_wrpy_imOut222"
  
            ],//"args"属性指定传递给程序的命令行参数

解决:注释掉CMakeLists.txt ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM3.yaml ../DataSet/TUM_Dataset/rgbd_dataset_freiburg3_walking_rpy/ Examples/RGB-D/associations/fr3_walking_rpy.txt /home/cgm/DynaSLAM/results/f3_wrpy_mask222 /home/cgm/DynaSLAM/results/f3_wrpy_imOut222 > run_out.txt 2>&1
然后再进行调试!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue冬奥会科普平台(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的冬奥会科普平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…

探索iOS之多摄像头预览架构

在iOS13.0开始支持多摄像头预览AVCaptureMultiCamSession,然后iOS15.0增加支持摄像头画中画预览。在使用之前,我们通过isMultiCamSupported()判断是否支持多Camera同时预览。 一、Camera架构 1、Camera流水线 Camera由AVCaptureDeviceInput、AVCaptur…

【实践篇】领域驱动设计:DDD工程参考架构 | 京东云技术团队

背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同,并没有统一的、标准的DDD工程架构。有些团队可能遵循经典的DDD四层架构,或改进的DDD四层架构,有些团队可能综合考虑分层架构、整洁架构、六边形架构等多种架构…

数据仓库选择Greenplum还是SQL-on-Hadoop

Greenplum和Hadoop都是为了解决大数据并行计算而出现的技术,二者的相似点在于: 分布式存储数据在多个节点上。采用分布式并行计算框架。支持向外扩展来提高整体的计算能力和存储容量。支持X86开放集群架构。 但两种技术在数据存储和计算方法上&#xf…

ADS-600树脂,除COD有机物树脂,大孔树脂型号,矿井水有机物

基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的,由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物,氯代烃等含氯物质,表面活性剂,氨基酸&#…

Python系列模块之标准库OS详解

感谢点赞和关注 ,每天进步一点点!加油! 目录 ​一、模块 1.1 模块的定义 1.2 模块的分类 1.3 模块的基本导入语法 二、Python中的包 三、标准库之os模块 实战: 钉钉告警应用 一、模块 1.1 模块的定义 Python 模块(Module)&a…

【JAVA程序设计】(C00139)基于Springboot+Thymeleaf的药店管理系统

基于SpringbootThymeleaf的药店管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本项目为基于SpringbootThymeleaf的药店管理系统(医院药品管理系统、医院管理系统),本项目主要功能为: 药品库存管理(登记…

0基础学习VR全景平台篇第27章:场景管理-视角功能

大家好,欢迎收看蛙色平台免费教程! 功能位置示意 一、本功能将用在哪里? 视角功能:指观看者打开场景时,默认展示的位置内容,可针对视角显示范围、视角远近范围进行设置。 应用场景:几乎每个作品…

通过nginx解决vue项目打包后跨域代理失效问题

这里 我的接口是写在 http://localhost:80上的 接口名是user 需要一个id路径参数 我们知道 80是默认 所以就可以不带端口因此访问就是http://localhost/user/1 然后 我vue项目中的 vue.config.js 配置如下 const { defineConfig } require(vue/cli-service) module.exports …

00后职场人,怎么做到刚来就涨薪5k? 原因竟是学会了这个宝藏工具

经常有粉丝问我有“有哪些适合绝大多数普通职场人的制作大屏的工具?” 确实,在这个内卷的时代,大家想要的是更加炫酷的汇报效果。要满足大多数职场人的大屏工具首先一定要满足以下三点: (1)简单易上手&am…

使用Python技术开发一个社区婴幼儿预防接种系统

婴幼儿预防接种作为社区预防保健的主要工作之一,是儿科临床和公共卫生保健的基础,目前国内外对婴幼儿预防接种工作非常重视。我们社区在工作中改变传统服务理念,根据不同年龄段婴幼儿的心理状态,采取不同心理护理应用,进行婴幼儿预防接种。 本论文主要论述了如何使用Python技术…

国际原油如何投资?国际原油期货投资策略有哪些?

国际原油产品的规模比较大,市场的交易环境是非常安全的,相信很多人都对国际原油产品的投资比较感兴趣,但是个人投资者需要注意:要买卖实体原油几乎是不可能的,投资者参与国际原油投资最方便快速的方式,就是…

【TCP】滑动窗口

滑动窗口 概念: 我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。 这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。 如果你说完一句话…

大数据面试题:请描述MapReduce中shuffle阶段的工作流程,如何优化shuffle阶段?

map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle。 shuffle: 洗牌、发牌——(核心机制:数据分区,排序,合并)。 shuffle是Mapreduce的核心&…

【社区图书馆】记:读完《网络工程师的Python之路:网络运维自动化实战(第2版)》读后感【书评】

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 书籍整体感受书籍中分了11大章&#…

springboot+vue实习管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的实习管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

数据库链接池从100ms优化到3ms!

数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1万并发用户访问 想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是…

开发中造成空指针的常见用法,如何避免

1. 前言 《手册》的第 7 页和 25 页有两段关于空指针的描述: 【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 返回类型为…

AIGC周报|让AI来画《海贼王》;苹果限制员工使用ChatGPT;李彦宏:不担心大模型会让工作消失

AIGC(AI Generated Content)即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT,以及 DallE 2、Stable Diffusion 等文生图模型,都属于 AIGC 的典型案例,它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

实现BIM的Revit软件学习资料

实现BIM的Revit软件学习资料 一、BIM与Revit的关系二、Revit使用方法总结(一)快捷键(二)一些技巧 一、BIM与Revit的关系 链接: BIM与Revit是什么关系?看完秒懂系列! REVIT是实现BIM理念的工具之一。 二、Revit使用方…