c++ - 如何使用 CMake 在调试器中将 follow-fork-mode 设置为子模式

标签 c++ cmake gdb clion

我有 Linux 系统,我使用 Clion IDE 编写程序,其中使用 CMake。我在程序中有一部分想要调试子进程 我从这个论坛上读了一些主题,但我仍然不知道如何或在哪里可以打开此功能:

gdb debugging child process after fork (follow-fork-mode child configured)

How do I debug the child process after fork() in gdb?

我刚刚尝试将标志 CMAKE_CXX_FLAGS_DEBUG 设置为 set follow-fork-mode child 但 CMake 给我错误。 下面的屏幕截图包含用于编译和调试我的程序的所有标志。 那么我必须在什么地方设置这个功能。

enter image description here

..::编辑::..

我相信这是个好方法。我认为你的提示很有用,但我有下一个问题。使用您的说明后,我的代码在线崩溃

pid_t newProcessForClient = fork();

声明是:

(gdb) set follow-fork-mode child [New process 31667] warning: File "/lib32/libthread_db-1.0.so" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. [Switching to process 31667] Continuing with signal SIGABRT.

Program terminated with signal SIGABRT, Aborted. The program no longer exists.

最佳答案

调试设置与cmake无关。 CMAKE_CXX_FLAGS_DEBUG 声明编译器的调试标志。但是,您需要告诉调试器set follow-fork-mode child。为此,您需要执行以下步骤:

  1. 在程序开始处设置一个断点(即父程序,而不是子程序)

  2. 在调试器中启动程序。

  3. 转到 clion 中的调试器控制台(标签为 gdb 的选项卡)并输入 set follow-fork-mode childset auto-load safe-路径/
  4. 继续调试

命令set auto-load safe-path/ 应该根据 documentation 切换自动加载限制。的 gdb。

关于c++ - 如何使用 CMake 在调试器中将 follow-fork-mode 设置为子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121840/

相关文章:

c++ - 在 C++ 中使用来自 CMAKE 的变量

cmake - 如何使用 CMake 修改导入库的范围

c++ - 在 gdb 中跟踪对类实例/内存范围的写访问

C 64 位服务器上的奇怪行为

c++ - OCaml 有引用传递的能力吗?

c# - Azure辅助角色中的程序执行可以在本地模拟器中运行,但不能在云中运行

C++ 错误 : no match for 'operator<<' in '"Data for "<< Rover::getName()()'

build - CMake 依赖目标不存在

c++ - 如何解决CLion上的此编译错误?

Python:使用 gdb 调试(在 OSX 上)