调试 mserver5

如何解决调试 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


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?