【问题标题】:How set follow-fork-mode as child in debugger using CMake如何使用 CMake 在调试器中将 follow-fork-mode 设置为子级
【发布时间】:2016-03-11 08:43:12
【问题描述】:

我有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 给我错误。 下面的屏幕截图包含用于编译和调试我的程序的所有标志。 那么我必须在哪里设置这个函数。

..::EDIT::..

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

pid_t newProcessForClient = fork();

声明是:

(gdb) set follow-fork-mode child [新进程 31667] 警告:文件 “/lib32/libthread_db-1.0.so”自动加载已被您拒绝 `auto-load safe-path' 设置为 "$debugdir:$datadir/auto-load"。警告: 找不到匹配劣质线程库的libthread_db,线程 调试将不可用。 【切换到进程31667】 继续使用信号 SIGABRT。

程序以信号 SIGABRT 终止,已中止。该程序不再 存在。

【问题讨论】:

  • set follow-fork-mode childGDB 命令,而不是编译标志。只需在 gdb 命令行中输入此命令即可。

标签: c++ cmake gdb clion


【解决方案1】:

调试设置与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 /应该是根据gdb的documentation来切换自动加载限制。

【讨论】:

  • 你的帖子很有用。真正的 IDE 尝试切换到新的进程,但出了点问题。你能看看我帖子里的EDIT吗?
  • 我更新了我的帖子,但是这次不是基于经验,而是基于使用谷歌。
  • 好的,我明白了。我尝试设置此选项,但仍然相同。我认为,主要问题已解决,因为您的提示是正确的。现在我必须看看我的系统出了什么问题。谢谢
  • 使用 CLion 2017.3.3 无法正常工作。我从 gdb 控制台设置了set follow-fork-mode child,但是当正在调试的进程派生一个新进程时,CLion 调试器就会断开连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2014-05-03
  • 2012-04-17
  • 2021-01-13
  • 2011-01-23
  • 1970-01-01
相关资源
最近更新 更多