使用CLion逐步执行C ++代码,同时启用PyCharm插件

时间:2017-12-19 13:39:28

标签: pycharm clion

启用PyCharm插件时,我在CLion中遇到问题。这就是我的工作:

  1. 从shell运行Python程序。该程序创建了多个进程(如worker),其中Python代码调用我想要调试的C ++代码。
  2. 从CLion,附加到原始的主要Python进程。
  3. 在一个或多个创建的进程中遇到C ++断点后逐步执行代码。
  4. 通常,这很好用。但是如果我启用了PyCharm插件,CLion似乎会以不同的方式处理主进程,并且不会触及我的任何C ++断点。

    有人知道如何使C ++断点工作,即使启用了PyCharm插件吗?

1 个答案:

答案 0 :(得分:1)

我刚刚找到了适合我甚至您自己需求的解决方案。

已在Clion 2019.3上使用Ubuntu 18.04,Python 3和GDB进行了测试。 我有一个生成C ++进程的Python进程,并且我想调试两者。 条件是知道子进程的名称或PID,并有时间手动附加到子进程(例如主进程中的“等待用户键”,或派生后的某个断点)。

根据this guide,在Ubuntu上,您需要临时或永久允许附加到外部本地进程。

要暂时禁用此限制,请输入命令:

回声0 | sudo tee / proc / sys / kernel / yama / ptrace_scope

要永久禁用此限制,请打开文件 /etc/sysctl.d/10-ptrace.conf用于编辑和更改行 kernel.yama.ptrace_scope = 1到kernel.yama.ptrace_scope =0。要应用 更改后,输入sudo service procps restart或重新启动系统, 根据您的选择。

然后:

  • 为您的Python脚本创建运行配置
  • 在需要的地方放置断点
  • 以调试模式运行Python脚本
  • 等待它分叉并在等待条件/断点处中断
  • 运行->附加以处理...
  • 输入PID或C ++子代的名称
  • 瞧,您可以控制主进程和子进程

不幸的是,我不知道如何使它自动化,但是在我的项目中效果很好,因为这两个进程交换消息,所以当我阻止一个进程时,另一个进程正在等待数据,并且我有时间手动附加到它。

请注意,这可能也是this question on StackOverflow的答案。