postgresql 是否有办法找到导致分段故障错误的来源?

lstz6jyr  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(5)|浏览(207)

我正在使用lex/yacc、Makefile和几个PostgreSQL文件(project link)创建一个新的AGE CLI。当执行创建的接口./agesql(类似于postgres的bin/psql)并输入反斜杠命令时,我得到错误:

ERROR: /* error message */
[1]    15675 segmentation fault  ./agesql

“分段故障”指的是什么,数字代表什么?有没有办法找到导致错误的原因?
我在MacOS上运行Postgres 15。要复制此错误,请运行postgres 15服务器并运行以下代码行来编译makefile:

git checkout AGE_CLI
export PATH={path to pgsql-15}/bin/:$PATH
export USE_PGXS=TRUE
flex -b -Cfe -p -p -o 'cypher.c' cypher.l
bison -d cypher.y
make

编译完成后,运行接口,然后运行反斜杠命令:

./agesql
\

这将产生分段故障错误。

rbl8hiat

rbl8hiat1#

“Segmentation fault”错误意味着程序试图访问不允许的内存位置。您可以通过使用调试找到问题的根源。
由于MainLoop()处理反斜杠命令,因此为函数设置一个断点,然后运行反斜杠命令以查找导致错误的行。MainLoopmainloop.c文件中定义。可以使用gdb进行调试。确保编译的代码带有调试标志export CFLAGS='-g3 -O0'

bqf10yzr

bqf10yzr2#

当程序访问超出其定义范围的内存时,会导致分段故障(通常是编程错误)。
编译时,设置“DEBUG FLAGS”,以获得调试控制台输出。
你可以做的其他事情是:
1.启用核心转储:获取程序的内存映像并进行分析。
1.使用日志记录语句跟踪程序流。
1.使用Valgrind

cgvd09ve

cgvd09ve3#

调试技术可用于查找分段错误的来源,也是使用gdb调试器的技术之一。要查找导致分段故障的原因,请尝试以下步骤。
1.启用调试符号并编译程序。另外,在makefile中添加-g标志,如下:
CFLAGS += -g
1.现在再次运行以重新编译。
1.初始化gdb,并使用以下代码将其添加到程序中
gdb ./agesql
1.启动gdb后,tyoe运行程序
1.因此,现在一旦发生分段错误,gdb将关注执行并给予有关崩溃的消息。
分析代码的来源行。希望能帮上忙!!

kninwzqo

kninwzqo4#

“分段错误”是程序试图访问不允许访问的内存位置时发生的特定错误。
数字“[1]”是指作业或任务编号。当有多个进程同时运行时,每个进程都有一个编号。在此方案中,“[1]”表示错误发生在第一个任务中。
'15675'表示发生错误的进程的进程ID(PID)。
要弄清楚如何解决这个问题,您可以使用调试工具或检查未初始化的变量。

bxgwgixi

bxgwgixi5#

当程序试图访问受限存储器位置时,发生分段故障,也称为“segfault”。
添加调试标志将帮助您对代码进行故障排除。使用调试标志,再次编译并使用GDB启动程序。

相关问题