启用 PyCharm 插件后,我在 CLion 中遇到问题。这就是我所做的:
- 从 shell 运行 Python 程序。该程序创建多个进程(如工作进程),其中 Python 代码调用我想要调试的 C++ 代码。
- 从 CLion 附加到原始主 Python 进程。
- 在一个或多个创建的进程中命中 C++ 断点后单步执行代码。
通常,这工作得很好。但如果我启用了 PyCharm 插件,CLion 似乎会以不同的方式对待主进程,并且不会命中任何 C++ 断点。
有谁知道如何让 C++ 断点工作,即使启用了 PyCharm 插件也是如此?
我刚刚找到了一个适合我的需求的解决方案,也许也适合您的需求。
这已经在使用 Ubuntu 18.04、Python 3 和 GDB 的 Clion 2019.3 上进行了测试。
我有一个生成 C++ 进程的 Python 进程,我想调试这两个进程。
条件是知道子进程的名称或 PID,并且有时间手动附加到子进程(就像主进程中的“等待用户密钥”,或者 fork 之后某处的断点)。
根据本指南 https://www.jetbrains.com/help/clion/2016.2/attaching-to-local-process.html?_ga=2.254137807.693430798.1587292001-1321661960.1583918819,在 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 或重新启动系统,
由您选择。
Then:
- 为您的 Python 脚本创建运行配置
- 在需要的地方放置断点
- 在调试模式下运行Python脚本
- 等待它分叉并在等待条件/断点处中断
- 运行->附加到进程...
- 输入 PID 或 C++ 子项的名称
- 瞧,您可以控制主进程和子进程
不幸的是,我不知道如何自动化它,但这在我的项目中工作得很好,因为两个进程交换消息,所以当我阻止一个进程时,另一个进程正在等待数据,我有时间手动附加到它。
作为旁注,这可能也是一个答案StackOverflow 上的这个问题 https://stackoverflow.com/questions/53674471/clion-debug-c-subprocess-spawned-by-python.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)