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