在previous post中,我演示了如何配置NetBeans以调试PostgreSQL和Apache Age。现在,在继续该主题的过程中,我将解释如何设置项目偏好并执行调试过程。因此,如果您已经在Netbeans中配置了PostgreSQL和Apache Age项目,则可以按照下一步步骤。
首先,我们需要创建一个新的数据库。在终端中,选择您的喜好目录。然后,使用以下命令启动新的PostgreSQL服务:
initdb agedb
pg_ctl -D path/to/agedb -l logfile start
createdb agedb
现在让我们返回Netbeans项目。专门针对年龄项目,无需从上一个教程进行任何更改。您可以像以前创建的那样留下它。但是,我们需要在IDE中为PostgreSQL配置一些首选项。
在您的PostgreSQL项目中,右键单击并选择属性。新窗口将弹出。选择类别调试以设置命令来调试代码。用psql agedb
填充 debug命令。这将启动命令行工具与Apache Age一起使用。接下来,用通往psql的路径填充工作dir 。在源代码中,PSQL可执行文件位于/src/bin/psql
中。这是Netbeans将用来运行调试命令的路径。
故障排除提示1:即使您不打算使用运行命令,也必须进行设置。这是我花了几个小时来弄清楚的问题。将运行命令设置为psql agedb
,运行目录与 debug工作dir 相同,并具有通往psql的路径。否则,NetBeans将显示下面的消息,IDE将不会识别PSQL为可执行文件:
您可以将其余字段作为默认设置,现在设置可以进行调试。右键单击您的Netbeans PostgreSQL项目,然后选择调试。 PSQL CLI工具将启动。将数据库与年龄扩展名与以下命令联系起来:
CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;
下一步是将调试器附加到Postgres进程。运行select pg_backend_pid();
以找到过程ID(PID)。终端将返回类似于以下输出的信息:
pg_backend_pid
----------------
11587
(1 row)
复制在终端中返回的号码,然后选择调试>附加调试器在顶部工具栏处。将ID粘贴在过滤器字段中。系统将返回Postgres流程信息:
对于本教程,我将所有设置留为默认设置。调试器是GDB调试器,主持人是Localhost。我建议不要选择一个项目,因为Netbeans会要求提供可执行文件,并且您将面临与图2相同的问题。
``提示2:在将调试器附加到Postgres进程时可能会遇到辩论错误,如图3所示。
PostgreSQL Wiki说,这可能是由于Ubuntu引入了一个补丁,以禁止非根本用户对非孩子的过程进行调整。警告:您可以禁用此限制,但是不建议这样做,因为这可能会导致系统漏洞。以自己的风险做。当我找到更好的PostgreSQL解决方案时,我将更新此帖子。请参阅以下线程以了解更多信息:https://askubuntu.com/a/153970。
要暂时禁用限制,运行:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
请注意,每次开始新的终端会话时都必须运行此命令。虽然您可以永久允许,但不建议这样做。编辑/etc/sysctl.d/10-ptrace.conf
并更改行:
kernel.yama.ptrace_scope = 1
kernel.yama.ptrace_scope = 0
现在,尝试再次附上Postgres进程。如果一切都起作用,Netbeans将显示以下状态:
要开始调试,请在要分析的函数中的行上创建一个断点。之后,通过PSQL CLI致电。例如,让我们检查age/src/backend/commands/graph_commands.c
中定义的create_graph()
函数。功能标头是Datum create_graph(PG_FUNCTION_ARGS)
。在图5中,我在第一个函数调用中添加了一个断点:
在CLI中,使用以下命令调用create_graph()
函数:
SELECT * FROM create_graph('graph_name');
您可以看到调试将停止/靠近断点:
您可以浏览顶部的调试按钮(逐步(F8),逐步进入(F7),逐步(Ctrl+F7),然后运行到Cursor(F4))检查每行,并在底部的“变量”选项卡上查看变量:
:并且完成调试功能后,可以单击继续(F5)继续执行:
您可以通过在调试工具上单击“红色正方”按钮或按Shift+F5来完成调试器会话。切记运行\q
退出PSQL CLI。
就是这样!这是一个简单的教程,讲述了如何通过Netbeans IDE调试Apache Age Age的功能。我希望您喜欢它,并希望这可以使调试过程更加容易。
参考
问Ubuntu。 葡萄酒计划的“ ptrace_scope”解决方案是什么?。2012年。于20123年7月20日访问。
PostgreSQL Wiki。 与Eclipse合作。可在https://wiki.postgresql.org/wiki/Working_with_Eclipse上找到。于20123年7月20日访问。
有助于apache时代
Apache Age网站:https://age.apache.org/
Apache Age GitHub:https://github.com/apache/age