调试 mserver5 的问题
Problems debugging mserver5
我最近开始调试 mserver5
应用程序,使用 vscode
和一个非常舒适的 cmake
插件 CMake Tools
。此外,我正在使用 gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
作为编译器以及 vscode
中 mserver5
的以下 launch.json
调试配置:
{
"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",
"ignoreFailures": true
},
{ "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
应用程序创建的,我将使用 [=24] 连接到它=] 使用默认用户名和密码组合 monetdb
的应用程序。使用带有 运行 dbfarm
.
的 monetdb
应用程序启动它时,我可以成功连接并查询我的 triangleDB
当使用上述 launch.json
文件从 vscode
启动 mserver5
进行调试并使用 mclient
和 monetdb
用户连接到它时,我无法以某种方式进行身份验证并将以下错误打印到 mserver5
日志中:
client1: createExceptionInternal: !ERROR: InvalidCredentialsException:checkCredentials:invalid credentials for user 'monetdb'
有人知道为什么 mserver5
无法检索默认用户吗?它是否依赖守护进程 monetdbd
从中检索用户数据?有人可以告诉我我遗漏了什么或者我如何有效地调试 mserver5
?
另一点是我需要设置 mapi_port=0
以使 mserver5
绑定到可用端口,因为它在使用 vscode
调试时以某种方式打开两个 mapi connections
和 CLion
。使用特定端口时应用程序崩溃,因为第二次绑定尝试将在已使用的地址上。下面一段显示调试时打开了两个连接:
# MonetDB 5 server v11.40.0
# This is an unreleased version
# Serving database 'triangleDB', using 24 threads
# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
# Found 31.349 GiB available main-memory of which we use 25.549 GiB
# Copyright (c) 1993 - July 2008 CWI.
# Copyright (c) August 2008 - 2021 MonetDB B.V., all rights reserved
# Visit https://www.monetdb.org/ for further information
# Listening for connection requests on mapi:monetdb://localhost:46093/
# Listening for connection requests on mapi:monetdb://localhost:40387/
提前感谢所有可以帮助我解决这个问题的人。期待收到您的来信并确保大家安全。
如果您的数据库是使用 monetdb
创建的,并且您想直接使用 mserver5
启动它,您需要告诉 mserver5
.vaultkey
在哪里。
在你dbfarm
里做一个grep monet_vault_key merovingian.log
,复制整个--set monet_vault_key=/<path-to>/dbfarm/demo/.vaultkey
然后把这个选项添加到你mserver5
.[=18的启动命令里=]
我在这里给出一个额外的答案,因为我想弄清楚我必须做什么才能使用 vscode
调试 mserver5
并使用 [=14= 与之交互]申请。
在尝试弄清楚为什么无法加载某些 modules/libraries 时,我注意到 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
我希望这个答案对以后的人有所帮助,并节省我不得不投入的所有调查时间。
我最近开始调试 mserver5
应用程序,使用 vscode
和一个非常舒适的 cmake
插件 CMake Tools
。此外,我正在使用 gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
作为编译器以及 vscode
中 mserver5
的以下 launch.json
调试配置:
{
"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",
"ignoreFailures": true
},
{ "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
应用程序创建的,我将使用 [=24] 连接到它=] 使用默认用户名和密码组合 monetdb
的应用程序。使用带有 运行 dbfarm
.
monetdb
应用程序启动它时,我可以成功连接并查询我的 triangleDB
当使用上述 launch.json
文件从 vscode
启动 mserver5
进行调试并使用 mclient
和 monetdb
用户连接到它时,我无法以某种方式进行身份验证并将以下错误打印到 mserver5
日志中:
client1: createExceptionInternal: !ERROR: InvalidCredentialsException:checkCredentials:invalid credentials for user 'monetdb'
有人知道为什么 mserver5
无法检索默认用户吗?它是否依赖守护进程 monetdbd
从中检索用户数据?有人可以告诉我我遗漏了什么或者我如何有效地调试 mserver5
?
另一点是我需要设置 mapi_port=0
以使 mserver5
绑定到可用端口,因为它在使用 vscode
调试时以某种方式打开两个 mapi connections
和 CLion
。使用特定端口时应用程序崩溃,因为第二次绑定尝试将在已使用的地址上。下面一段显示调试时打开了两个连接:
# MonetDB 5 server v11.40.0
# This is an unreleased version
# Serving database 'triangleDB', using 24 threads
# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
# Found 31.349 GiB available main-memory of which we use 25.549 GiB
# Copyright (c) 1993 - July 2008 CWI.
# Copyright (c) August 2008 - 2021 MonetDB B.V., all rights reserved
# Visit https://www.monetdb.org/ for further information
# Listening for connection requests on mapi:monetdb://localhost:46093/
# Listening for connection requests on mapi:monetdb://localhost:40387/
提前感谢所有可以帮助我解决这个问题的人。期待收到您的来信并确保大家安全。
如果您的数据库是使用 monetdb
创建的,并且您想直接使用 mserver5
启动它,您需要告诉 mserver5
.vaultkey
在哪里。
在你dbfarm
里做一个grep monet_vault_key merovingian.log
,复制整个--set monet_vault_key=/<path-to>/dbfarm/demo/.vaultkey
然后把这个选项添加到你mserver5
.[=18的启动命令里=]
我在这里给出一个额外的答案,因为我想弄清楚我必须做什么才能使用 vscode
调试 mserver5
并使用 [=14= 与之交互]申请。
在尝试弄清楚为什么无法加载某些 modules/libraries 时,我注意到 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
我希望这个答案对以后的人有所帮助,并节省我不得不投入的所有调查时间。