如何使用Apache Netbeans IDE调试Apache Apache Age源代码
#发展 #c #apacheage #netbeans

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为可执行文件:

Figure 1 - “File is not an executable” issue.

图1-文件不是可执行的问题。

您可以将其余字段作为默认设置,现在设置可以进行调试。右键单击您的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流程信息:

Figure 2 - Attach Debugger window.

图2-附加调试器窗口。

对于本教程,我将所有设置留为默认设置。调试器是GDB调试器,主持人是Localhost。我建议不要选择一个项目,因为Netbeans会要求提供可执行文件,并且您将面临与图2相同的问题。

``提示2:在将调试器附加到Postgres进程时可能会遇到辩论错误,如图3所示。

Figure 3 - Ptrace “Operation not permitted” error.

图3- ptrace不允许进行错误。

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将显示以下状态:

Figure 4 - Netbeans Debug sessions.

图4- NetBeans调试会话。

要开始调试,请在要分析的函数中的行上创建一个断点。之后,通过PSQL CLI致电。例如,让我们检查age/src/backend/commands/graph_commands.c中定义的create_graph()函数。功能标头是Datum create_graph(PG_FUNCTION_ARGS)。在图5中,我在第一个函数调用中添加了一个断点:

Figure 5 - Breakpoint example.

图5-断点示例。

在CLI中,使用以下命令调用create_graph()函数:

SELECT * FROM create_graph('graph_name');

您可以看到调试将停止/靠近断点:

Figure 6 - Debug stopped at a breakpoint at graph_commands.c file, line 69.

图6- debug在graph_commands.c文件的断点停止,第69行。

您可以浏览顶部的调试按钮(逐步(F8),逐步进入(F7),逐步(Ctrl+F7),然后运行到Cursor(F4))检查每行,并在底部的“变量”选项卡上查看变量:

Figure 7 - Debug “Step Over” navigation.

图7-导航步骤。

Figure 9 - Debug navigation buttons.

图9-调试导航按钮。

并且完成调试功能后,可以单击继续(F5)继续执行:

Figure 10 - Proceeding with program execution.

图10-进行程序执行。

您可以通过在调试工具上单击“红色正方”按钮或按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