你距离拥有一个GPT还有3步,编码、编译、启动…
编写FakeGPT代码
价值亿元的AI模块搞里头
// fakegpt.cint FakeGPT_chat(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {...###价值亿元的AI代码太过惊世骇俗,手动马赛克###...return REDISMODULE_OK;}int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {// 初始化模块APIif (RedisModule_Init(ctx, "FakeGPT", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR)return REDISMODULE_ERR;// 创建命令 FakeGPT.chatif (RedisModule_CreateCommand(ctx, "FakeGPT.chat", FakeGPT_chat, "fast random", 1, 1, 1) == REDISMODULE_ERR)return REDISMODULE_ERR;return REDISMODULE_OK;}// fakegpt.c int FakeGPT_chat(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { ...###价值亿元的AI代码太过惊世骇俗,手动马赛克###... return REDISMODULE_OK; } int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // 初始化模块API if (RedisModule_Init(ctx, "FakeGPT", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR; // 创建命令 FakeGPT.chat if (RedisModule_CreateCommand(ctx, "FakeGPT.chat", FakeGPT_chat, "fast random", 1, 1, 1) == REDISMODULE_ERR) return REDISMODULE_ERR; return REDISMODULE_OK; }// fakegpt.c int FakeGPT_chat(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { ...###价值亿元的AI代码太过惊世骇俗,手动马赛克###... return REDISMODULE_OK; } int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // 初始化模块API if (RedisModule_Init(ctx, "FakeGPT", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR; // 创建命令 FakeGPT.chat if (RedisModule_CreateCommand(ctx, "FakeGPT.chat", FakeGPT_chat, "fast random", 1, 1, 1) == REDISMODULE_ERR) return REDISMODULE_ERR; return REDISMODULE_OK; }
将自定义模块代码编译为动态链接库备用
gcc -o fakegpt.so -fPIC -shared fakegpt.cgcc -o fakegpt.so -fPIC -shared fakegpt.cgcc -o fakegpt.so -fPIC -shared fakegpt.c
编译Redis源码
- Windows系统编译Redis源码除了需要
gcc
和make
外,还需要依赖一些系统头文件,需要先安装msys2环境,然后在msys2中安装gcc、make、pkg-config
包之后就可以编译Redis源码了(如果已经安装过WSL,可以直接在WSL环境下编译,没安装过WSL则推荐使用更轻量级的msys2)
# https://www.msys2.org 下载安装完成后,通过以下命令安装相关工具包# git 用于下载源码,gcc、make、pkg-config 用于编译源码,gdb用于调试pacman -S gcc make pkg-config git gdb# 安装成功后,下载Redis源码cd ~git clone -b 6.0 https://github.com/redis/redis.git# 编译源码,noopt表示编译器不做优化,方便后续调试代码cd redis && make noopt# Hint: It's a good idea to run 'make test' ;) 当你看到这段输出的时候,表示编译完成了# https://www.msys2.org 下载安装完成后,通过以下命令安装相关工具包 # git 用于下载源码,gcc、make、pkg-config 用于编译源码,gdb用于调试 pacman -S gcc make pkg-config git gdb # 安装成功后,下载Redis源码 cd ~ git clone -b 6.0 https://github.com/redis/redis.git # 编译源码,noopt表示编译器不做优化,方便后续调试代码 cd redis && make noopt # Hint: It's a good idea to run 'make test' ;) 当你看到这段输出的时候,表示编译完成了# https://www.msys2.org 下载安装完成后,通过以下命令安装相关工具包 # git 用于下载源码,gcc、make、pkg-config 用于编译源码,gdb用于调试 pacman -S gcc make pkg-config git gdb # 安装成功后,下载Redis源码 cd ~ git clone -b 6.0 https://github.com/redis/redis.git # 编译源码,noopt表示编译器不做优化,方便后续调试代码 cd redis && make noopt # Hint: It's a good idea to run 'make test' ;) 当你看到这段输出的时候,表示编译完成了
- macOS和Linux环境下编译Redis源码属于有手就行,这里不再赘述…
见证时刻的奇迹
启动Redis服务器:
启动Redis命令行工具,加载自定义模块,然后:
完美!
调试源码
GDB调试Redis
VSCode调试Redis
Windows下配置launch.json
{"version": "0.2.0","configurations": [{"name": "GDB-redis-server","type": "cppdbg","request": "launch","program": "${workspaceFolder}/src/redis-server.exe","args": [],"stopAtEntry": true,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "C:\Users\...\env\msys2\usr\bin\gdb.exe"}]}{ "version": "0.2.0", "configurations": [ { "name": "GDB-redis-server", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/src/redis-server.exe", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\Users\...\env\msys2\usr\bin\gdb.exe" } ] }{ "version": "0.2.0", "configurations": [ { "name": "GDB-redis-server", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/src/redis-server.exe", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\Users\...\env\msys2\usr\bin\gdb.exe" } ] }
macOS下gdb
需要配置安全证书和sodu
权限,比较麻烦,推荐使用lldb
调试,配置launch.json如下
{"version": "0.2.0","configurations": [{"name": "Redis Server Run","type": "cppdbg","request": "launch","program": "${workspaceFolder}/src/redis-server","args": [],"stopAtEntry": true,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "lldb"}]}{ "version": "0.2.0", "configurations": [ { "name": "Redis Server Run", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/src/redis-server", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] }{ "version": "0.2.0", "configurations": [ { "name": "Redis Server Run", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/src/redis-server", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "lldb" } ] }
VSCode也支持在DEBUG CONSOLE执行原生gdb/lldb
命令
如果调试过程中发现无法定位到源码(比如通过gdb命令行打断点显示的是一个内存地址而不是符号),打开src/.make-settings
文件,查看上一次编译的优化参数是否为-O0
;
通过执行一次make distclean
清除编译缓存,然后再重新编译make noopt
Tips:Windows下低版本(16.x)的VSCode可能会导致gdb启动失败,如果通过gdb命令行调试没问题,VSCode启动gdb报错的情况,建议升级VSCode到最新版本再尝试
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END