在启用 PyCharm 插件的情况下使用 CLion 逐步执行 C++ 代码

2024-02-05

启用 PyCharm 插件后,我在 CLion 中遇到问题。这就是我所做的:

  1. 从 shell 运行 Python 程序。该程序创建多个进程(如工作进程),其中 Python 代码调用我想要调试的 C++ 代码。
  2. 从 CLion 附加到原始主 Python 进程。
  3. 在一个或多个创建的进程中命中 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(使用前将#替换为@)

在启用 PyCharm 插件的情况下使用 CLion 逐步执行 C++ 代码 的相关文章

随机推荐

  • 使用 AngularJS 日期过滤器和 UTC 日期

    我有一个以毫秒为单位的 UTC 日期 我将其传递给 Angular 的日期过滤器以进行人工格式化 someDate date d MMMM yyyy 太棒了 除了someDate采用 UTC 时间 并且日期过滤器认为它是当地时间 我如何告诉
  • String(value) 与 value.toString() 有什么区别

    Javascript 在类型和类型转换方面有很多 技巧 所以我想知道这两种方法是否相同 或者是否存在某些特殊情况使它们不同 它们并不完全相同 实际上 作为函数调用的 String 构造函数 http bclary com 2004 11 0
  • Android:打开指定多个收件人的短信活动[重复]

    这个问题在这里已经有答案了 我正在尝试通过启动意图来启动手机短信提供商 我下面使用的代码是我用来启动意图的代码 Intent sendIntent new Intent Intent ACTION VIEW StringBuilder ur
  • 我应该在 git 别名脚本中使用 `sh -c \"...\"` 或 `"!f() {... ; }; f" 吗?

    我已经开始尝试编写带参数的 git 别名了 我见过一些人运行 shell 脚本 alias shAlias sh c 和其他运行函数 alias fAlias f f 看起来 一旦我加快了 Bash 的速度 这还不是我现在的状态 我想要做的
  • 在清单中声明 Google api 密钥(对于 youtube API)

    使用地图 API 我可以在清单中声明我的密钥
  • 部署的 Azure Function (v2) 未运行

    我有一个 Azure Function v2 可以在本地运行 部署到 Azure 后 一切似乎都正常 包含二进制文件的 bin 文件夹和包含 function json 的函数名称文件夹 但是 当我检查它们是否运行 查看日志 时 它们不在监
  • JavaScript 中的 DOM 解析

    一些背景 我正在使用 JavaScript 开发一个基于 Web 的移动应用程序 HTML 渲染基于 Safari 跨域策略已禁用 因此我可以使用 XmlHttpRequests 调用其他域 这个想法是解析外部 HTML 并获取特定元素的文
  • 使用 Haskell 输入数据

    背景故事 为了更好地理解 Haskell 和函数式编程 我给自己布置了一些作业 我的第一个任务是编写一个程序 可以查看数据集 一组数字 博客中的单词等 搜索模式或重复 对它们进行分组并报告它们 听起来很容易 Question 我希望程序首先
  • SELECT ... ORDER BY xxx LIMIT 1 FOR UPDATE 将锁定多少行?

    我有一个具有以下结构的查询 SELECT WHERE status QUEUED ORDER BY position ASC LIMIT 1 FOR UPDATE 这是 InnoDB 表上的单表 SELECT 语句 场地position I
  • 将 onBlur 与 JSX 和 React 结合使用

    我正在尝试创建一个密码确认功能 仅在用户离开确认字段后才呈现错误 我正在使用 Facebook 的 React JS 这是我的输入组件
  • XSLT 1.0 金额字段必须至少有 2 位小数

    我有两个 xml 有一个金额字段 可以包含 54 2 54 23 54 234 54 234567 等值 有人请告诉我如何确保输出 xml 中至少出现两位小数 当前 54 2 转换为 54 2 但我希望它是 54 20 您可以使用 form
  • 我可以使用没有 getter 和 setter 的 mvc 吗?

    如果我不想公开对象的状态 但仍然需要显示它 例如 以 HTML XML 或 JSON 的形式 我将如何在 MVC 环境中做到这一点 使用导出方法来导出简化的不可变对象 如果愿意的话 可以称为 数据类 是否有意义 添加与接口对话的渲染方法怎么
  • python 属性重载运算符

    是否可以重载 python 属性上的运算符 就像是 class Foo object property def bar self return unfoobar self bar bar setter def bar self baz se
  • 在分析代码时是否应该使用匹配的 (gcc) 编译器优化标志?

    我在用 O3 http linux die net man 1 g 编译代码时 现在我需要对其进行分析 对于分析 我遇到了两个主要选择 valgrind tool callgrind http valgrind org docs manua
  • 当使用position:fixed时是否可以保持父元素的宽度?

    当我们申请时position fixed到一个元素 它被采取脱离正常流动 http quirksmode org css css2 position html link7文档的宽度 因此它不尊重其父元素的宽度 有没有办法让它继承父级的宽度如
  • writeHTMLCell() 之后的 TCPDF Write() 不会显示任何内容

    我使用后 pdf gt writeHTML 同一页面上不显示任何内容 如果我使用 pdf gt AddPage 然后用文字写成 pdf gt Write 再次显示 为什么 我应该怎么做才能在同一页上写字 html table table p
  • 在 Windows 窗体用户控件中嵌入 XNA 游戏

    我写了一个简单的 XNA 4 0 游戏 我想制作一个 Windows 窗体用户控件来渲染此游戏 并向 XNA 提供必要的交互反馈 键盘和鼠标 我已经尝试过以下方法 In XNA 将 XNA 的 Game GraphicsDevice 重定向
  • get_the_id 与 post->ID 与 the_id / get_post_meta

    我认为这一定是一个非常基本的问题 但我才刚刚开始 有人可以看一下下面相同 代码的 3 个版本并说出有什么区别吗 所有这些似乎在我正在处理的循环中都工作得很好 应该使用哪个 post gt ID the ID or get the id 是否
  • 如何从 Delphi 的主线程向 TThread 发送消息?

    我想向一个线程发送消息并在线程中处理它 我怎样才能在德尔福中做到这一点 我猜PostMessage是要走的路 但到目前为止我看到的例子描述的是另一种方式 即从线程到主线程 我什至不会尝试解释或编写任何代码 看看这个教程就知道了 它有点旧 但
  • 在启用 PyCharm 插件的情况下使用 CLion 逐步执行 C++ 代码

    启用 PyCharm 插件后 我在 CLion 中遇到问题 这就是我所做的 从 shell 运行 Python 程序 该程序创建多个进程 如工作进程 其中 Python 代码调用我想要调试的 C 代码 从 CLion 附加到原始主 Pyth