C++ 用gdb检测sh?

C++ 用gdb检测sh?,c++,unix,C++,Unix,我正在使用科学linux。在user/project/Build目录中,在运行“make”编译和链接所有cpp文件之后,我没有遇到任何问题。但是,当我转到目录user/run/run.sh,它在user/project/Build/bin/project中运行项目二进制文件时,我得到了一个分段错误。在user/run目录中,我在命令提示符下输入'gdb',并得到消息“***未指定目标,未找到makefile.Stop” 我应该如何检测分段错误?首先,您必须使用调试符号支持构建项目。对于gcc,这

我正在使用科学linux。在user/project/Build目录中,在运行“make”编译和链接所有cpp文件之后,我没有遇到任何问题。但是,当我转到目录user/run/run.sh,它在user/project/Build/bin/project中运行项目二进制文件时,我得到了一个分段错误。在user/run目录中,我在命令提示符下输入'gdb',并得到消息“***未指定目标,未找到makefile.Stop”


我应该如何检测分段错误?

首先,您必须使用调试符号支持构建项目。对于
gcc
,这是使用
-g
选项完成的。然后用程序的可执行文件运行
gdb
。例如:

gdb./a.out

出现
gdb
命令promt。要启动程序,应执行命令
run
。如果程序需要一些命令行参数,也可以指定它们。例如
运行-d firstarg-l secondarg

当您的程序收到分段错误时,只需执行
gdb
提示命令
bt完整版


这将为您提供程序的回溯、变量状态和接收SEGFULT的源代码行

在项目上使用gdb而不是sh文件。然后,当我使用命令提示符进入目录
/user/project/Build/bin
,然后键入
gdb project
,然后
run
,我看到
使用libthread\u db启用线程调试。。程序已退出,代码为01。缺少单独的调试信息,请使用:debuginfo安装glibc-2.12-1.149.el6_6.4.x86_64 libICE-1.0.6-1.el6.x86_64…
当我使用命令提示符进入目录
/user/project/Build/bin
然后键入
gdb project
然后运行
时,我看到
启用了使用libthread\u db进行线程调试。。程序已退出,代码为01。缺少单独的调试信息,请使用:debuginfo安装glibc-2.12-1.149.el6_6.4.x86_64 libICE-1.0.6-1.el6.x86_64…
GDB通知您可能需要为libc和libICE安装其他调试信息包。通常这不是强制性的,但如果需要,您可以安装它们。退出代码是main返回的数字。因此,如果我不想安装libc和libICE,如何解决此问题?在从
gdb
运行程序时,尝试重现segfault。传递相同的参数,执行相同的操作e.t.c.
程序以代码01退出。
显示程序成功退出。如果发生segfault,请使用我的答案中的命令。但是,在
gdb
中,segfault无法再现的情况非常罕见。看看这个非常有趣的讨论,程序不需要一些命令行参数。当我输入
bt full
时,输出为
no stack
。另外,我忘了提到我得到的特定seg错误是
PETSC错误:捕获信号编号11 SEGV:分段冲突