You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调试Apache AGE的make installcheck测试过程?

如何调试Apache AGE的make installcheck测试过程?

嘿,我完全懂你的痛点——直接gdb --args make installcheck肯定没用,因为make只是个负责调度的构建工具,真正跑测试逻辑的是PostgreSQL的pg_regress测试框架,以及背后运行的postgres进程(毕竟AGE是PostgreSQL的扩展,测试代码最终都是在postgres里执行的)。既然你已经会用GDB,那下面这两种方法应该能帮你精准调试测试过程:

方法一:单独调试指定测试案例(推荐,更高效)

这种方法适合你只想调试某一个特定测试文件的场景,步骤如下:

  1. 确保编译时带调试符号:不管是PostgreSQL还是Apache AGE,编译时一定要加--enable-debug参数,不然GDB里看不到函数名、变量这些关键信息,调试等于瞎忙活。
  2. 手动启动带GDB的postgres实例:
    • 先创建一个临时测试数据目录(比如mkdir ~/age_test_db),然后初始化:initdb -D ~/age_test_db
    • 用GDB启动postgres:gdb --args postgres -D ~/age_test_db
    • 在GDB里设置你需要的断点,比如要调试AGE的cypher_execute函数,就输入break cypher_execute
    • 输入run启动postgres进程,保持这个终端窗口打开
  3. 运行指定测试文件:
    • 新开一个终端,切换到Apache AGE的测试目录(比如cd age/tests/regress)
    • 用pg_regress指定连接到刚才启动的postgres实例,比如调试create_graph.sql测试:
      pg_regress --dbname=postgres --host=localhost --port=5432 create_graph.sql
      
    这样测试代码就会连接到你用GDB调试的postgres进程,触发断点时就会自动停下。

方法二:修改make installcheck的执行逻辑,全局调试

如果你想调试整个make installcheck的所有测试,可以修改测试框架的启动参数:

  1. 找到测试目录的Makefile:一般在age/src/age/test/regress/Makefile路径下
  2. 修改pg_regress的调用参数:找到里面调用pg_regress的行,加上--launcher='gdb --args'参数,这样pg_regress启动postgres时会自动用GDB包裹
  3. 执行make installcheck:运行make installcheck后,会自动弹出GDB界面,你先设置好断点,输入continue,测试就会继续执行,遇到断点就会停下
  4. 可选:保留临时数据目录:默认make installcheck跑完会删掉临时数据目录,如果你想事后排查问题,可以加上环境变量:
    REGRESS_TEMP_DIR=/path/to/your/temp/dir make installcheck
    
    这样测试完成后数据目录不会被删除。

另外提醒一句:调试时如果遇到postgres进程退出或者测试卡住,记得检查GDB的输出,有时候是断点设置的位置不对,或者测试框架的临时端口冲突,调整一下就行。

备注:内容来源于stack exchange,提问作者Marco Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:08:12