调试 mserver5

问题描述

我最近开始使用 mserver5 和名为 vscode 的非常舒适的 cmake 插件调试 CMake Tools 应用程序。此外,我正在使用 gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) 作为编译器以及 launch.jsonmserver5 的以下 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 进行调试并使用 mclientmonetdb 用户连接到它时,我无法进行身份验证以某种方式将以下错误打印到 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


我希望这个答案能在将来对某人有所帮助,并节省我必须投入的所有调查时间。