使用VsCode编译调试Neo4j源码

文章目录

  • 使用VsCode编译调试Neo4j源码
    • [1 简介](#1 简介)
    • [2 步骤](#2 步骤)
      • [1 下载源码](#1 下载源码)
      • [2 依赖](#2 依赖)
      • [3 构建Neo4j](#3 构建Neo4j)
      • [4 运行](#4 运行)
      • [5 安装VsCode扩展](#5 安装VsCode扩展)
      • [6 **调试**](#6 调试)

使用VsCode编译调试Neo4j源码

1 简介

Neo4j作为领先的图数据库,在存储、查询上都非常值得分析学习。通过调试、日志等方法跟踪代码工作流有助于理解其原理及具体实现。本文旨在帮助想要单步调试Neo4j却不知道怎么搞,或是遇到些问题的朋友。

2 步骤

1 下载源码

Neo4j源码

本文用的5.26版本

2 依赖

按照源码中的README就行,本文是基于Ubuntu

  • 安装JAVA及配置环境
bash 复制代码
apt-get install openjdk-17-jdk -y

# 装完后需要配置一下环境变量
code ~/.bashrc

添加以下两行内容:

复制代码
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
bash 复制代码
# 保存并关闭文件后,运行以下命令使更改生效
source ~/.bashrc

# 验证安装
java -version
  • 安装Maven及环境配置
    注:使用ubuntu的apt安装的maven版本较低。 需要下载更新的版本:
bash 复制代码
# 下载Maven 3.8.2
wget https://downloads.apache.org/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz

# 解压
tar -xvzf apache-maven-3.8.2-bin.tar.gz -C /opt

# 配置环境变量
code ~/.bashrc

添加以下两行:

复制代码
export MAVEN_HOME=/opt/apache-maven-3.8.2
export PATH=$PATH:$MAVEN_HOME/bin
bash 复制代码
# 保存并关闭文件后,运行以下命令使更改生效
source ~/.bashrc

# 验证安装 
mvn -v

3 构建Neo4j

按照README就行了。我直接执行的以下命令没有遇到任何问题,如果遇到一些问题,可以看一下README这部分的东西

bash 复制代码
mvn clean install -DskipTests -T1C

构建完成后,到packaging/standalone/target目录下解压neo4j-community-5.26.1-SNAPSHOT-unix.tar.gz

bash 复制代码
cd packaging/standalone/target
tar -xvzf neo4j-community-5.26.1-SNAPSHOT-unix.tar.gz

4 运行

解压后,进入解压的目录就可以运行Neo4j了

bash 复制代码
cd neo4j-community-5.26.1-SNAPSHOT
# 运行Neo4j
bin/neo4j-admin server start

# 停止
bin/neo4j-admin server stop

运行后点开网页会发现:

json 复制代码
{
  "errors": [
    {
      "code": "Neo.ClientError.Request.Invalid",
      "message": "Not Found"
    }
  ]
}

这是由于从源码编译运行,缺少neo4j-browser-5.24.0.jar 。我的解决办法是从release的Neo4j docker里面拷贝过来。该文件是在/var/lib/neo4j/lib目录下

5 安装VsCode扩展

在VsCode扩展应用商店中搜索并安装Extension Pack for Java

6 调试

  • 修改Neo4j配置文件
    配置文件都在neo4j-community-5.26.1-SNAPSHOT/conf目录下,打开neo4j.conf添加

    server.jvm.additional=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005

注:如果你是在docker里面开发,并且映射了相应端口,需要把server.default_listen_address=0.0.0.0这一行解注释

修改完配置文件后再运行Neo4j,会有如下输出:

bash 复制代码
Directories in use:
home:         /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT
config:       /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/conf
logs:         /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/logs
plugins:      /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/plugins
import:       /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/import
data:         /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/data
certificates: /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/certificates
licenses:     /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/licenses
run:          /neo4j/packaging/standalone/target/neo4j-community-5.26.1-SNAPSHOT/run
Starting Neo4j.
Listening for transport dt_socket at address: 5005

说明Neo4j正在监听调试端口5005.

  • 修改vscode调试任务配置文件
    打开.vscode目录下的launch.jsonconfigurations中添加:
json 复制代码
{
    "type": "java",
    "name": "Debug Neo4j",
    "request": "attach",
    "hostName": "localhost",
    "port": 5005
}

如果没有.vscode,需要点运行和调试生成。之前安装的插件会帮你导入很多调试配置

  • 开始调试
    使用该配置开始调试,就可以连接进Neo4j调试了
相关推荐
zhaqonianzhu8 小时前
【vsc】cpptools占用内存过大
vscode
智慧地球(AI·Earth)13 小时前
Codex配置问题解析:wire_api格式不匹配导致的“Reconnecting...”循环
开发语言·人工智能·vscode·codex·claude code
清水白石00816 小时前
深入 Python 的底层世界:从 C 扩展到 ctypes 与 Cython 的本质差异全解析
c语言·python·neo4j
markvivv16 小时前
在 Kylin Linux Advanced Server for Kunpeng V10 上构建 VSCode 1.106
linux·vscode·kylin
zhangfeng113317 小时前
Kiro python环境的设置 中文语言包设置,通用vscode ,因为kiro是vscode基础上做的
开发语言·vscode·python
微醺的老虎18 小时前
【工具】vscode格式化json文件
ide·vscode·编辑器
乔宕一19 小时前
vscode 设置每次调试 powershell 脚本都使用临时的 powershell 终端
ide·vscode·编辑器
唐装鼠20 小时前
linux vscode解压版 AI账号无法登陆问题(浏览器无法打开vscode)
linux·运维·vscode
gravity_w21 小时前
vscode配置SSH远程服务器
服务器·经验分享·vscode·ssh
TGITCIC1 天前
讲透知识图谱Neo4j在构建Agent时到底怎么用(二)
人工智能·知识图谱·neo4j·ai agent·ai智能体·大模型落地·graphrag