在进行C/C相关的开发时,经常会遇到段错误。 此时,让人无语的是,Linux shell终端不会输出太多有用的信息。 在许多情况下,打印信息如下所示: 分段故障(核心冗馀)。 错误如下图所示。
有个大人物为了解决这个问题开发了一个叫backward-cpp的工具。 此工具假设您要在Cmake中生成项目。 其Github仓库的地址是https://github.com/bombe la/backward-CPP
如下图所示。
最近,需要将在Windows10上创建的VC控制台程序移植到Linux上。 发行版是CentOS7,它使用CMake编译和管理项目,然后才能运行。 但是,生成可执行文件,在执行过程中出现了错误。 分段故障(核心冗馀)。
没有任何提示。 我们参考了在GDB调试器设置segmentationfault(coredump )中调试本文。
但对我的项目没什么效果
最后,您看到调试段错误segmentationfault(coredumped )打印详细的错误信息,并按照此博客中的说明将backward-cpp下放到CMakeLists.txt上的项目对等目录中
git clone https://github.com/bombe la/backward-CPP.git官方文档为CMake提供了两种集成方法。 我在项目中使用了第一个As a subdirectory
在这种情况下,有一个包含整个Backward存储库的子目录。 例如,使用千兆-次模块。 在这种情况下,可以执行以下操作:
add _ subdirectory (/path/to/backward-CPP ) thiswilladdbackward.cpptoyourtargetadd _ executable mytargetmysourgetable This will add libraries,definitionsandincludedirectoriesneededbybackward # bysettingeachpropertyonthetarget.add _ backward ()
project(db2HJ212_YC_towns ) cmake_minimum_required ) version2.8 ) set ) version1.0.0 ) add_definitions ) itions(-dpugixml_header_only ) (add_subdirections ) )-dpugixml_header_only ) include _ directories (//mariadb ) set ) GB212_ ) ) ) ) 652 HJ 212 generator.CPP./MySQL2file.CPP./remote server.CPP # ./include main if (cmake _ compiler _ is _ GNU cxx ) set ) cmake _ cxx _ flags '-STD=c11 $ { cmake _ cxx _ flags } ' } endif } endif boost_1_69_0(endif(win32 ) set (env _ dynamic _ libs '/usr/local/lib ' )动态库路径(通过设置一些自定义变量set ) boost _ include dir $ { boost _ root }/include ) #set ) boost_root}/include ) boo ost 652 find _ library (boostrequiredcomponentsthread ) include _ directories ($ { boost _ include _ dirs } )===============================link _ directories (/usr/local/lib 64 ) ${backward_enable} ) add_backward ) $ { project _ name } install (targets $ { project _ name }运行时目标
请注意,在将backward-cpp添加到CMakeLists.txt之后,您会看到调试堆栈错误消息。
参考资料backward-cpp调试段错误segmentationfault (核心折叠)打印详细错误信息GDB调试器设置segmentationfault )进行调试