我现在在我的工作中测试一个Web应用程序。我使用Debian。我不知道是什么类型的项目,只知道它是内置在 Perl 并使用 PostgreSQL 。构建Back-End的项目使用 CARTON ,一个Perl模块依赖项管理器(又名Bundler for Perl)http://search.cpan.org/~miyagawa/Carton-v1.0.12/lib/Carton.pm。要运行后端,我必须启动PostgreSQL sudo su postgres
,然后执行命令carton exec foo
,后端开始工作。但今天,经过一些更新和升级后,我执行了它并收到了此错误消息Segmentation fault
。我发现要检查发生了什么,我必须得到一个回溯,所以我发现并阅读了这篇文章:
但仍然不明白如何使用GDB运行项目。
由于
答案 0 :(得分:0)
但仍然没有找到如何获得回溯。一旦我开始使用gdb模式,我不知道在gdb模式下运行后端要键入什么。
很难回答你的问题,因为目前尚不清楚你到底陷入困境。
使用您提供的第一个链接将GDB附加到后端:
sudo gdb -p pid
(gdb) continue
现在执行任何导致后端崩溃的命令。完成后,GDB将停止并打印如下内容:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004c0 in foo (p=0x0) at t.c:1
(gdb)
现在您已准备好使用where
GDB命令获取崩溃堆栈跟踪。
(gdb) where
#0 0x00000000004004c0 in foo (p=0x0) at t.c:1
#1 0x00000000004004dc in bar (p=0x0) at t.c:2
#2 0x00000000004004ec in main () at t.c:4
您可能无法获得文件/行信息和参数值(您需要安装第二个链接中描述的debuginfo包),但是您应该获取函数名称,这可能足以找到相关的错误。