问题描述
我最近开始使用 mserver5
和名为 vscode
的非常舒适的 cmake
插件调试 CMake Tools
应用程序。此外,我正在使用 gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
作为编译器以及 launch.json
中 mserver5
的以下 vscode
调试配置:
{
"version": "0.2.0","configurations": [
{
"name": "(gdb) mserver5 triangleDB","type": "cppdbg","request": "launch",// Resolved by CMake Tools:
"program": "${command:cmake.launchTargetPath}","args": ["--dbpath=/home/mledl/dbfarm/triangleDB","--set","mapi_port=0"],"stopAtEntry": false,"cwd": "${workspaceFolder}/build","environment": [
{
// add the directory where our target was built to the PATHs
// it gets resolved by CMake Tools:
"name": "PATH","value": "$PATH:${command:cmake.launchTargetDirectory}"
},],"externalConsole": true,"MIMode": "gdb","setupCommands": [
{
"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true
},{ "description":"In this mode GDB will be attached to both processes after a call to fork() or vfork().","text": "-gdb-set detach-on-fork off",{ "description": "The new process is debugged after a fork. The parent process runs unimpeded.","text": "-gdb-set follow-fork-mode child","ignoreFailures": true
}
]
}
]
}
我要连接的数据库(此处为 triangleDB
)是在 dbfarm
中使用 monetdb
应用程序创建的,我将使用 mclient
具有默认用户名和密码组合 monetdb
的应用程序。使用 triangleDB
应用程序和正在运行的 monetdb
启动它时,我可以成功连接到并查询我的 dbfarm
。
当使用上述 mserver5
文件从 vscode
启动 launch.json
进行调试并使用 mclient
和 monetdb
用户连接到它时,我无法进行身份验证以某种方式将以下错误打印到 mserver5
日志中:
client1: createExceptionInternal: !ERROR: InvalidCredentialsException:checkCredentials:invalid credentials for user 'monetdb'
有人知道为什么 mserver5
无法检索默认用户吗?它是否依赖守护进程 monetdbd
来检索用户数据?有人能告诉我我遗漏了什么或如何有效地调试 mserver5
吗?
另一点是我需要设置 mapi_port=0
以使 mserver5
绑定到可用端口,因为它在使用 mapi connections
和 { 调试时以某种方式打开两个 vscode
{1}}。应用程序在使用特定端口时崩溃,因为第二次绑定尝试将在已使用的地址上。以下部分显示调试时打开了两个连接:
CLion
提前感谢所有可以帮助我解决这个问题的人。期待收到您的来信,并确保大家安全。
解决方法
如果您的数据库是使用 monetdb
创建的,并且您想直接使用 mserver5
启动它,您需要告诉 mserver5
.vaultkey
在哪里。
在您的 dbfarm
中,执行 grep monet_vault_key merovingian.log
,复制整个 --set monet_vault_key=/<path-to>/dbfarm/demo/.vaultkey
并将此选项添加到您的 mserver5
的启动命令中。
我在这里给出一个额外的答案,因为我想说明我必须做什么才能使用 mserver5
调试 vscode
并使用 mclient
应用程序与其交互.
在尝试找出无法加载某些模块/库的原因时,我注意到 GDK kernel
缺少一个名为 monet_mod_path
的环境变量,可以使用 --set monet_mod_path=/usr/local/lib/monetdb5
选项设置该变量mserver5
。缺失的 monet_mod_path
也是 mserver5
在两个地址上侦听 mapi connection
的原因。
我现在使用以下命令启动 mserver5
进行调试:
mserver5 --dbpath=/home/mledl/dbfarm/triangleDB --set monet_vault_key=/home/mledl/dbfarm/triangleDB/.vaultkey --set monet_mod_path=/usr/local/lib/monetdb5 --set gdk_nr_threads=24 --set max_clients=64 --set sql_optimizer=default_pipe
最低工作配置如下:
mserver5 --dbpath=/path/to/your/db --set monet_vault_key=/path/to/your/db/.vaultkey --set monet_mod_path=/usr/local/lib/monetdb5
注意:我将应用程序安装到默认安装目录中。如果您选择自定义,则 monet 模块路径具有以下模式:
monet_mod_path=/path/to/install/lib/monetdb5
我希望这个答案能在将来对某人有所帮助,并节省我必须投入的所有调查时间。