当前位置: 首页 > news >正文

使用GDB或Delve对已经运行起来的Go程序进行远程调试

同步发布在我的博客,欢迎来点赞。
使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试

使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试

背景

Java 程序可以很方便地通过 jdwp 参数指定一个对外端口进行远程调试,如

java \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50055 \
-jar remote-debug-0.0.1-SNAPSHOT.jar &

这样,我们在本地机器就可以很方便地调试远程已经运行起来的 Java 程序了。

那么,Golang 是否有类似的方法能实现呢?

GDB

通过以下指令安装

apt install gdbserver  #  在远程机器上
apt install gdb  # 在本地机器上

1. 启动 Go 程序

假设我们有一个http 服务端程序:

package mainimport ("fmt""log""net/http""strings"
)func sayHelloName(w http.ResponseWriter, r *http.Request) {fmt.Println()_ = r.ParseForm() //解析参数,默认是不会解析的fmt.Println(r.Form)fmt.Println("path", r.URL.Path)fmt.Println("scheme", r.URL.Scheme)fmt.Println(r.Form["url_long"])for k, v := range r.Form {fmt.Println("key", k)fmt.Println("val", strings.Join(v, ""))}fmt.Fprintf(w, "Hello astaxie!")
}func main() {http.HandleFunc("/", sayHelloName)// 使用默认路由器开始监听err := http.ListenAndServe(":9090", nil)if err != nil {log.Fatal("ListenAndServe: ", err)}
}

将其编译并运行:

go build -o main
./main

这样,此时,这个简单的go程序就开始运行了。

2. 使用 gdbserver 连接程序

另起一个终端,使用 gdbserver 连接这个进程

## 获取进程pid
# ps aut | grep main   
root      3664  0.0  0.0 1600584 6012 pts/1    Sl+  12:38   0:00 ./main
## 连接到这个进程,<2345>是自行指定的对外端口
# gdbserver localhost:2345 --attach 3664
Attached; pid = 3664
Listening on port 2345

这样,我们的开发机就准备好远程调试我们的go程序了。

顺便,第1、2步可以直接使用gdbserver指令代替:

gdbserver localhost:2345 ./main

3. 使用 gdb 连接到 gdbserver

在本地的机器上使用 gdb 连接启动的 gdbserver 服务。这里在同一台机器(localhost)上模拟

# gdb  # 运行gdb    
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04.3) 12.1
Copyright (C) 2022 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 "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://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".
(gdb) target remote localhost:2345  
Remote debugging using localhost:2345
Reading /root/project/go-web/main from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /root/project/go-web/main from remote target...
Reading symbols from target:/root/project/go-web/main...
Reading /lib/x86_64-linux-gnu/libc.so.6 from remote target...
Reading /lib64/ld-linux-x86-64.so.2 from remote target...
Reading symbols from target:/lib/x86_64-linux-gnu/libc.so.6...
Reading symbols from /usr/lib/debug/.build-id/49/0fef8403240c91833978d494d39e537409b92e.debug...
Reading symbols from target:/lib64/ld-linux-x86-64.so.2...
Reading symbols from /usr/lib/debug/.build-id/41/86944c50f8a32b47d74931e3f512b811813b64.debug...
Reading /lib64/ld-linux-x86-64.so.2 from remote target...
Reading /usr/lib/debug/.build-id/04/f611a778dee3b5f92c1df94f899d200c106375.debug from remote target...
internal/runtime/syscall.Syscall6 () at /usr/local/go/src/internal/runtime/syscall/asm_linux_amd64.s:36
36              CMPQ    AX, $0xfffffffffffff001
(gdb) list
31              MOVQ    DI, DX  // a3
32              MOVQ    CX, SI  // a2
33              MOVQ    BX, DI  // a1
34              // num already in AX.
35              SYSCALL
36              CMPQ    AX, $0xfffffffffffff001
37              JLS     ok
38              NEGQ    AX
39              MOVQ    AX, CX  // errno
40              MOVQ    $-1, AX // r1
(gdb) 

使用 gdb 指令target remote指定远程gdbserver的地址即可。

Delve

gdb只能看到对应的汇编代码(想查看源代码可能需要更多设置),而且常用的 IDE Goland 并不支持 GDB 调试 Go 程序。

更好的解决办法是使用 Delve 构建。

在远程机器上安装:

apt install delve

如果在之后的第二步运行时报错:

# dlv attach 5600 --headless --listen=:2345 --api-version=2 --log
API server listening at: [::]:2345
2024-11-18T12:57:43+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
2024-11-18T12:57:43+08:00 info layer=debugger attaching to pid 5600
2024-11-18T12:57:43+08:00 error layer=debugger can't find build-id note on binary
2024-11-18T12:57:44+08:00 error layer=debugger could not patch runtime.mallogc: no type entry found, use 'types' for a list of valid types
panic: <nil> not an Intgoroutine 1 [running]:
go/constant.Int64Val({0x0, 0x0})go/constant/value.go:502 +0x119
github.com/go-delve/delve/pkg/proc.(*Variable).parseG.func2({0xa580c0, 0xc000a41e48})github.com/go-delve/delve/pkg/proc/variables.go:879 +0x49
github.com/go-delve/delve/pkg/proc.(*Variable).parseG(0xb3a588)github.com/go-delve/delve/pkg/proc/variables.go:901 +0x5b5
github.com/go-delve/delve/pkg/proc.GetG({0xb3a588, 0xc00035c460})github.com/go-delve/delve/pkg/proc/variables.go:258 +0xae
github.com/go-delve/delve/pkg/proc.NewTarget({0xb3e4e0, 0xc0001b4480}, 0x15e0, {0xb3a588, 0xc00035c460}, {{0xc000288050, 0xe}, {0xc0001d5110, 0x1, 0x1}, ...})github.com/go-delve/delve/pkg/proc/target.go:210 +0x2cf
github.com/go-delve/delve/pkg/proc/native.(*nativeProcess).initialize(0xc0001b4480, {0xc000288050, 0xe}, {0xc0001d5110, 0x1, 0x1})github.com/go-delve/delve/pkg/proc/native/proc.go:268 +0x145
github.com/go-delve/delve/pkg/proc/native.Attach(0x5a3725, {0xc0001d5110, 0x1, 0x1})github.com/go-delve/delve/pkg/proc/native/proc_linux.go:157 +0x18f
github.com/go-delve/delve/service/debugger.(*Debugger).Attach(0xc00035c230, 0xc000000004, {0x0, 0x5})github.com/go-delve/delve/service/debugger/debugger.go:349 +0xd6
github.com/go-delve/delve/service/debugger.New(0xc0001ce1c0, {0xc00014c970, 0x0, 0x4})github.com/go-delve/delve/service/debugger/debugger.go:160 +0x5c5
github.com/go-delve/delve/service/rpccommon.(*ServerImpl).Run(0xc000125260)github.com/go-delve/delve/service/rpccommon/server.go:122 +0xd6
github.com/go-delve/delve/cmd/dlv/cmds.execute(0x15e0, {0xc00014c970, 0x0, 0x4}, 0xc0001d8ea0, {0x0, 0x0}, 0x3, {0xc00014c960, 0x1, ...}, ...)github.com/go-delve/delve/cmd/dlv/cmds/commands.go:971 +0xc7f
github.com/go-delve/delve/cmd/dlv/cmds.attachCmd(0xc0001eaf00, {0xc00014c960, 0x1, 0x5})github.com/go-delve/delve/cmd/dlv/cmds/commands.go:771 +0x145
github.com/spf13/cobra.(*Command).execute(0xc0001eaf00, {0xc00014c910, 0x5, 0x5})github.com/spf13/cobra/command.go:860 +0x5f8
github.com/spf13/cobra.(*Command).ExecuteC(0xc0001eac80)github.com/spf13/cobra/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)github.com/spf13/cobra/command.go:902
main.main()github.com/go-delve/delve/cmd/dlv/main.go:24 +0x18a

这可能是Delve版本不匹配,可以改用以下方法安装:

go install github.com/go-delve/delve/cmd/dlv@latest

1. 编译并运行 Go 程序

同样地,我们使用之前的 http 服务作为例子。

go build 的参数all=-N -l表示关闭优化和内联,这会让调试更加准确。

go build -gcflags="all=-N -l" -o main
./main

2. 使用 delve 连接运行中的进程

和 gdbserver 操作类似,需要指定进程 pid 和对外端口。

# ps aux | grep main 
root      7799  0.0  0.0 1602348 10320 pts/1   tl+  13:03   0:00 ./main
# dlv attach 7799 --headless --listen=:2345 --api-version=2 --log 

3. 在本地机器连接到远程的 Delve 服务器

这里直接使用 Goland 内置的 Delve 工具

创建一个 Go Remote 的配置

在这里插入图片描述

指定远程 delve 服务的 ip 和端口

在这里插入图片描述

配置完成,启动调试,就会在我们预设的断点处停止了。

在这里插入图片描述

如同在本地一般,我们可以查看变量并对其进行调试:

在这里插入图片描述

相关文章:

使用GDB或Delve对已经运行起来的Go程序进行远程调试

同步发布在我的博客&#xff0c;欢迎来点赞。 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 使用 GDB 或 Delve 对已经运行起来的 Go 程序进行远程调试 背景 Java 程序可以很方便地通过 jdwp 参数指定一个对外端口进行远程调试&#xff0c;如 java \ -agentlib…...

集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1

蓝牙模组 - RF-BM-2340B1是基于美国TI的CC2340R5为核心设计的一款SimpleLink 2.4 GHz 无线模块。支持Bluetooth 5.3 Low Energy、Zigbee 、IEEE 802.15.4g、TI 15.4-Stack (2.4 GHz)及私有协议。集成了高性能ARM Cortex-M0处理器&#xff0c;具有512 KB Flash、32 KB超低泄漏SR…...

笔记记录 k8s-install

master节点安装: yum upgrade -y 更新系统 yum update -y 升级内核 ifconfig ens33 关闭swap swapoff -a (临时) vim /etc/fstab (永久) #/dev/mapper/cl-swap swap swap defaults 0 0 vim /etc/sysctl.conf vm.swappin…...

【YOLOv8】安卓端部署-1-项目介绍

【YOLOv8】安卓端部署-1-项目介绍 1 什么是YOLOv81.1 YOLOv8 的主要特性1.2 YOLOv8分割模型1.2.1 YOLACT实例分割算法之计算掩码1.2.1.1 YOLACT 的掩码原型与最终的掩码的关系1.2.1.2 插值时的目标检测中提取的物体特征1.2.1.3 coefficients&#xff08;系数&#xff09;作用1.…...

会员等级经验问题

问题描述 会员从一级完成任务升级到二级以后&#xff0c;一级显示还差经验&#xff0c;这里差的其实是二级到三级的经验&#xff0c;如下图所示 修复方法 1、前端需要修改&#xff1a; 路径&#xff1a;/pages/users/user_vip/index.vue 方便复制&#xff1a; v-if"i…...

go-zero(一) 介绍和使用

go-zero 介绍和使用 一、什么是 go-zero&#xff1f; go-zero 是一个基于 Go 语言的微服务框架&#xff0c;提供了高效、简单并易于扩展的 API 设计和开发模式。它主要目的是为开发者提供一种简单的方式来构建和管理云原生应用。 1.go-zero 的核心特性 高性能&#xff1a; g…...

buuoj WEB做题笔记

[极客大挑战 2019]EasySQL password输入存在注入&#xff1a; 123or 11 -- flag{68144110-18b9-4882-93f1-6f6e7b1c67ec} [极客大挑战 2019]Havefun 看网页源码&#xff0c;发现尾部有一段注释得代码&#xff0c;尝试 /?catdog,回显得flag{01c680f5-0d62-4e2c-a805-cfcf6b…...

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介&#xff1a; Aurora是一个带UI且免费的GPT私人聊天助手&#xff0c;可切换GPT-3.5&#xff0c;4&#xff0c;4o等常用版本。用户可通过部署Aurora&#xff0c;快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...

用sqlmap工具打sqli-labs前20关靶场

这个星期我们用手动注入打了前20关靶场&#xff0c;今天我们用sqlmap直接梭哈前20关 1.介绍sqlmap sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞。 2.下载和使用sqlmap 官方下载地址&#xff1a;GitHub - sq…...

Spark SQL大数据分析快速上手-完全分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…...

弹幕发送功能‘简单’实现

导入依赖 <!-- websocket弹幕依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>后端代码 package com.by.danmaku;import org.springfra…...

springboot基于SpringBoot的校园招聘网站的设计与实现现

摘 要 校园招聘网站是一个专门为高校毕业生和用人单位提供就业与招聘信息的网络平台。该网站通过现代互联网技术&#xff0c;实现了职位信息的发布、简历投递、在线沟通等功能&#xff0c;极大地方便了企业和学生之间的互动。在设计上&#xff0c;网站注重用户体验&#xff0c…...

徒手从零搭建一套ELK日志平台

徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…...

java八股-SpringCloud微服务-Eureka理论

文章目录 SpringCloud架构Eureka流程Nacos和Eureka的区别是&#xff1f;CAP定理Ribbon负载均衡策略自定义负载均衡策略如何实现&#xff1f;本章小结 SpringCloud架构 Eureka流程 服务提供者向Eureka注册服务信息服务消费者向注册中心拉取服务信息服务消费者使用负载均衡算法挑…...

Git 多仓库提交用户信息动态设置

Git 多仓库提交用户信息动态设置 原文地址&#xff1a;dddhl.cn 前言 在日常开发中&#xff0c;我们可能需要同时管理多个远程仓库&#xff08;如 GitHub、Gitee、GitLab&#xff09;&#xff0c;而每个仓库使用不同的邮箱和用户名。比如&#xff0c;GitHub 和 Gitee 使用相…...

CPU详细介绍

CPU&#xff08;中央处理器&#xff0c;Central Processing Unit&#xff09;是计算机系统的核心部件之一&#xff0c;被称为计算机的“大脑”。它负责执行计算机程序中的各种指令&#xff0c;并管理和协调计算机系统的各个硬件组件。以下是对 CPU 的详细介绍&#xff0c;包括其…...

kafka中的数据清理策略

Kafka 中的数据清理策略主要用于控制数据的保留时间和存储空间&#xff0c;确保系统不会因为数据积累过多而影响性能。Kafka 提供了两种主要的数据清理策略&#xff1a; 1、基于时间的清理策略&#xff1a; 配置参数&#xff1a;log.retention.hours 或 log.retention.ms工作…...

django基于Django的二手电子设备交易平台设计与开发

摘 要 科学技术日新月异&#xff0c;人们的生活都发生了翻天覆地的变化&#xff0c;二手电子设备交易平台管理当然也不例外。过去的信息管理都使用传统的方式实行&#xff0c;既花费了时间&#xff0c;又浪费了精力。在信息如此发达的今天&#xff0c;我们可以通过网络这个媒介…...

WPF如何全局应用黑白主题效果

灰白色很多时候用于纪念&#xff0c;哀悼等。那么使用 WPF如何来做到这种效果呢&#xff1f;要实现的这种效果&#xff0c;我们会发现&#xff0c;它其实不仅仅是要针对图片&#xff0c;而是要针对整个窗口来实现灰白色。 如果只是针对图片的话&#xff0c;我可以可以对图片进…...

软件测试之测试用例扩展

软件测试之测试用例扩展 1. 测试用例覆盖2. UI布局覆盖3. 兼容性覆盖4. 测试用例条数 1. 测试用例覆盖 规则覆盖UI布局兼容性 2. UI布局覆盖 2条用例即可 布局, 颜色与原型图一致图片和文字描述无误 3. 兼容性覆盖 测试5大浏览器 火狐谷歌ieEge苹果 4. 测试用例条数 使…...

【Apache Paimon】-- 2 -- 核心特性 (0.9.0)

目录 1、实时更新 1.1、实时大批量更新 1.2、支持定义合并引擎 1.3、支持定义更新日志生成器 2、海量数据追加处理 2.1、append table 2.2、快速查询 3、数据湖功能(类比:hudi、iceberg、delta) 3.1、支持 ACID 事务 3.2、支持 Time travel(时间旅行) 3.3、支持…...

Mybatis入门

在学习MyBatis之前先了解一下什么是Mybatis&#xff1f;它能解决什么问题&#xff1f; 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。 Mybatis解决什么问题&#xff1f; MyBatis 免除了几乎所有的 JDBC…...

智能方法求解-圆环内传感器节点最大最小距离分布

本篇文章是博主在最优化、人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在最优化算…...

Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装

Python Matplotlib 安装指南&#xff1a;使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一&#xff0c;结合Miniconda可以轻松管理安装和依赖项。在这篇文章中&#xff0c;我们将详细介绍如何使用Miniconda在Linux、mac…...

数学建模学习(137):使用Python进行频数分析

在数据科学的工作中,频数分析是一种用于描述变量值出现次数的重要统计方法。SPSS等工具提供了便捷的频数分析功能,而在Python中,我们同样可以通过灵活的库来实现相同的分析。在本文中,我们将介绍如何使用Python来完成频数分析,并演示如何用Pandas、Matplotlib等库来分析和…...

[Unity] 【游戏开发】Unity开发基础1-创建Unity项目:从Unity Hub选择合适的渲染管

创建一个新的Unity项目通常是开发过程中的第一步,而Unity为此提供了强大的工具和灵活的选项。本文将详细介绍如何使用Unity Hub创建项目、选择合适的Unity版本、模板和渲染管线,并阐述每种选项的优缺点和适用场景。 1. Unity Hub:统一管理项目和版本 Unity Hub是Unity提供…...

大型语言模型综述 A Survey of Large Language Models

文章源自 2303.18223 (arxiv.org) 如有侵权&#xff0c;请通知下线 这是一篇关于大语言模型&#xff08;LLMs&#xff09;的综述论文&#xff0c;主要介绍了 LLMs 的发展历程、技术架构、训练方法、应用领域以及面临的挑战等方面&#xff0c;具体内容如下&#xff1a; 摘要…...

基于MATLAB的混沌序列图像加密程序

设计目的 图像信息生动形象&#xff0c;它已成为人类表达信息的重要手段之一&#xff0c;网络上的图像数据很多是要求发送方和接受都要进行加密通信&#xff0c;信息的安全与保密显得尤为重要&#xff0c;因此我想运用异或运算将数据进行隐藏&#xff0c;连续使用同一数据对图…...

容器安全检测和渗透测试工具

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect Docker-bench-…...

视频修复技术和实时在线处理

什么是视频修复&#xff1f; 视频修复技术的目标是填补视频中的缺失部分&#xff0c;使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频&#xff0c;导致处理速度慢&#xff0c;难以满足实时处理的需求。 技术发…...

MyBatis——#{} 和 ${} 的区别和动态 SQL

1. #{} 和 ${} 的区别 为了方便&#xff0c;接下来使用注解方式来演示&#xff1a; #{} 的 SQL 语句中的参数是用过 ? 来起到类似于占位符的作用&#xff0c;而 ${} 是直接进行参数替换&#xff0c;这种直接替换的即时 SQL 就可能会出现一个问题 当传入一个字符串时&#xff…...

学习日志014--用python实现顺序表

之前我们用c语言实现顺序表&#xff0c;今天就然我们用python来复习一遍 一、创建顺序表 python的类可以代替c中的结构体作为复合数据类型。 创建学生类&#xff0c;并用装饰器将方法属性化&#xff0c;便于之后的修改。属性装饰器&#xff0c;可以在保护私有属性&#xff0…...

Android ConstraintLayout 基础

Android ConstraintLayout 基础 屏障线 Barrier设置水平和垂直方向的约束关系长宽比链式结构组站位辅助线 参考地址 屏障线 Barrier 以下是使用 ConstraintLayout 在 Android 中实现简单屏障线&#xff08;Barrier&#xff09;使用的示例代码&#xff0c;主要步骤如下&#xf…...

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…...

【网站推荐】the top trending open-source startups, every quarter

每季度最热门的开源初创公司 我们根据 GitHub 存储库自 2020 年以来的明星增长情况发布热门开源项目&#xff0c;并将其称为 Runa 开源初创公司 (ROSS) 指数。 una Capital actively invests in open-source startups (like Nginx and MariaDB) and considers an active deve…...

Java通过calcite实时读取kafka中的数据

引入maven依赖 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-kafka</artifactId> <version>1.28.0</version> </dependency> 测试代码 import java.sql.Connection; import java.sql.DriverMan…...

el-table 数据去重后合并表尾合计行,金额千分位分割并保留两位小数,表尾合计行表格合并

问题背景 最近在做后台管理项目el-table 时候需要进行表尾合计&#xff0c;修改合计后文字的样式&#xff0c;合并单元格。 想实现的效果 合并表尾单元格前三列为1格&#xff1b;对某些指定的单元格进行表尾合计&#xff1b;合计后的文本样式加粗&#xff1b;涉及到金额需要千…...

Flutter:RotationTransition旋转动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…...

《Python浪漫的烟花表白特效》

一、背景介绍 烟花象征着浪漫与激情&#xff0c;将它与表白结合在一起&#xff0c;会创造出别具一格的惊喜效果。使用Python的turtle模块&#xff0c;我们可以轻松绘制出动态的烟花特效&#xff0c;再配合文字表白&#xff0c;打造一段专属的浪漫体验。 接下来&#xff0c;让…...

Java面试题分享

1、hashmap的底层设计原理以及扩容规则&#xff0c;是否线程安全&#xff0c;如何线程安全。 jdk1.7以前采用数组加链表结构通过键哈希确定数组下标存键值对。jdk1.8及以后采用数组加链表加红黑树&#xff0c;链表超阈值且数组满足条件会转红黑树&#xff0c;哈希函数先取键 h…...

定时器的小应用

第一个项目 第一步&#xff0c;RCC开启时钟&#xff0c;这个基本上每个代码都是第一步&#xff0c;不用多想&#xff0c;在这里打开时钟后&#xff0c;定时器的基准时钟和整个外设的工作时钟就都会同时打开了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);第二步&…...

【计算机网络】UDP协议

一、UDP协议格式 1.报头的含义 ① 16位源端口号&#xff1a;自己的端口号 ② 16位目的端口号&#xff1a;对方的端口号 ③ 16位UDP长度&#xff1a;整个数据报(UDP报头UDP有效载荷)的长度&#xff0c;最大64KB 一个UDP最多传64KB的数据&#xff0c;如果要传的数据 > 64K…...

vulhub之log4j

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…...

[Unity] 关于引入Google SDK以及使用的方法

在Unity中接入谷歌SDK&#xff08;如Google Play Games SDK或Firebase SDK等&#xff09;通常涉及几个关键步骤&#xff0c;包括下载SDK、导入Unity项目、配置项目设置、编写必要的代码以及测试集成。以下是一个基于Firebase SDK接入Unity的示例&#xff0c;同时涵盖了Google P…...

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的&#xff0c;还可以存链表、数组等等复杂数据结构 而且数据是在…...

第R4周:LSTM-火灾温度预测(pytorch版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 往期文章可查阅&#xff1a; 深度学习总结 任务说明&#xff1a;数据集中提供了火灾温度&#xff08;Tem1&#xff09;、一氧化碳浓度…...

基于SpringBoot和uniapp开发的医护上门系统上门护理小程序

项目分析 一、市场需求分析 人口老龄化趋势&#xff1a;随着全球及中国人口老龄化的加剧&#xff0c;老年人口数量显著增加&#xff0c;对医疗护理服务的需求也随之增长。老年人由于身体机能下降&#xff0c;更需要便捷、高效的医护服务&#xff0c;而医护上门服务恰好满足了这…...

js批量输入地址获取经纬度

使用js调用高德地图的接口批量输入地址获取经纬度。 以下的请求接口的key请换成你的key。 创建key&#xff1a;我的应用 | 高德控制台 &#xff0c;服务平台选择《Web服务》。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-…...

Python自动化测试实践中pytest用到的功能dependency和parametrize

Python自动化测试中pytest用到的功能 1、pytest之@pytest.mark.dependency装饰器设置测试用例之间的依赖关系 1.1说明: 1、这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文测试用例失败后续的用例会被标识为跳过执行,相当于执行了 pytest.mark.s…...

json-bigint处理前端精度丢失问题

问题描述&#xff1a;前后端调试过程中&#xff0c;有时候会遇到精度丢失的问题&#xff0c;比如后端给过来的id超过16位&#xff0c;就会出现精度丢失的情况&#xff0c;前端拿到的id与后端给过来的不一致。 解决方案&#xff1a; 1、安装 npm i json-bigint 2、在axios中配置…...