【问题标题】:gdb Program exited code 01 for program using CMakegdb Program exited code 01 for program using CMake
【发布时间】:2015-02-23 18:26:28
【问题描述】:

我正在使用科学 Linux。我正在处理带有大量 cpp 文件的 C++ 中的大量代码。现在,它编译成功,但我得到的值/数据肯定是错误的。此外,对于我对代码所做的一些小改动会导致段错误。

user/project/Build目录下,我输入make编译链接所有cpp文件。然后我必须去user/project/Build/bin/project 输入user/run/run.sh 来运行项目二进制文件

当我进入目录/user/project/Build/bin,然后输入gdb project,然后输入run,我看到了 Program exited with code 01. Missing separate debuginfos, use: debuginfo-install glibc..

如果我尝试设置断点,例如通过break test.cpp:19,我会收到消息No source file named test.cpp. Make breakpoint pending on future shared library load? 但我显然有一个名为 test.cpp 的源文件

如何设置断点?考虑到我是 Unix 的初学者,我应该使用 emacs 或 Qt creator 等其他 IDE 吗?

【问题讨论】:

  • 要按行号设置断点,您需要将-g 选项传递给C++ 编译器。这是一个问题/答案,说明如何针对典型情况执行此操作:Compiling with cmake and include debug information
  • 在我的Build 目录中,我输入了cmake -DCMAKE_BUILD_TYPE:STRING=Debug ../src。但我得到的输出是Looking for pthread_create - not found. -- Found Threads: TRUE CMake Error at log4cplus/CMakeLists.txt:152 (SetupBoost): Unknown CMake command "SetupBoost". -- Configuring incomplete, errors occurred!
  • 好的,所以您使用的是 CMake,但您从未使用过 cmake 命令?
  • 抱歉,我忘记你使用的是 C++,而不是 C。有 CXXFLAGS 行吗?如果没有,请在 Makefile 顶部附近添加一行 CXXFLAGS+= -g,然后重新编译。 make 喷出的 g++ 或 clang++ 命令行中应该有一个 -g
  • 现在编辑 Makefile。可能发生的最糟糕的情况是,您对 Makefile 所做的手动更改有时会被 cmake 覆盖。最终,我们需要知道您键入的 cmake 系列命令中的哪个命令来生成该 Makefile。

标签: c++ linux qt emacs gdb


【解决方案1】:

你读过GDB的documentation吗?绝对值得一读。在gdb上阅读一些tutorial

如果你的Makefile-s是cmake生成的,你还应该研究makedocumentation of cmakedocumentation。另请参阅 this answer 的相关问题。

您是否使用g++ -Wall -g 编译所有您的软件(并且没有任何优化标志,如-O1-O2) - 或者甚至可能是-g3-g

您甚至可以安装正在使用的主要库的调试变体(例如,glibc-debuginfo 等软件包...)

您可能希望使用gdbdir command 指定(对于gdb)要搜索的源目录...

是的,我推荐使用emacs。但最重要的是,我强烈建议您花几个小时(也许几天甚至几周)来了解更多关于 Linux 和软件开发的知识(有很多书籍、网站、tutorialsother 培训,......关于那个)。也许从一个类似于 hello-world 的小型程序开始(学习如何使用 g++ 编译它并使用 gdb 调试它)。然后尝试编译和调试一个小的(例如十万行源代码)您喜欢的免费软件(例如fishshell 或您从sourceforgegithub 获得的任何东西),只是为了感受一下这样的软件是如何构建的。

如果您正在使用(或改进)一个大型科学软件,它可能有一些社区网站、邮件列表或论坛寻求帮助(参见 geantkivaaster 为例,我只知道按名字!)。请也使用它们。

PS。这主要不是选择工具的问题:您使用的是好的工具(GCC 即g++emacsgdbmakegrepacketagsgit , awk, ....)。花费数周或数月的时间来获取有关如何明智地使用它们并结合使用它们的知识是一个问题。另见thisthat

【讨论】:

  • 如果它是一个只有十几个人工作的代码,它就不是一个巨大代码,而是一个中等大小的代码。 GCC 编译器、Linux 内核、mozilla 浏览器或 GEANT4 模拟代码都有数百万行代码(因此每个代码都由数百人开发)。如果该代码周围没有社区,你应该开始一个!
  • Adn 你真的应该编辑你的问题,通过解释更多来改进它们,并提供更多上下文。至少用几句话解释你的代码在做什么,它是如何组织的(它的大小是多少)等等。
猜你喜欢
  • 2022-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2010-11-05
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多