首页 > 解决方案 > Qt代码编辑器中断点的实现

问题描述

我正在开发一个用于调试 Qt 中的脚本和代码的 IDE,我的职责是实现 GUI,并且此 url 中有一个非常好的 Qt 文档中的代码编辑器示例:http: //doc.qt.io/qt-5 /qtwidgets-widgets-codeeditor-example.html

所有引入的功能(如行号和突出显示和语法)都得到了很好的解释,但是有一些关于实现断点作为代码编辑器文档的扩展的话:

除了行号之外,您还可以向额外区域添加更多内容,例如断点。

我只是想知道,因为文档明确指出断点实现将是开发代码编辑器组件的下一步,但是当我用谷歌搜索和搜索网站时,我没有找到任何具有相关实现的文章或项目或示例在 IDE 中实现断点。我只是想问一下您是否知道有关此问题的任何示例或指南,如果您能帮助我完成此操作,我将非常高兴,否则我将进行子类化并自己实现它,并在这里提出更详细的问题。

提前感谢您的阅读:)

更新

我最终实现了这样的功能,例如:断点和断点区域、正在运行的当前行、跳过、步入、继续和其他调试器功能,我使用 PythonQt 作为与 Python/C API 通信的 API 来调试我的脚本. 我使用 QTextBlockUserData 来实现断点数据及其方面,因此它将由块的数据本身管理。这就是我首先要寻找的所有东西。如果有人有任何问题,我很乐意提供帮助。

标签: qtideeditorbreakpointstext-editor

解决方案


我最好的猜测是检查 QtCreator 断点支持。

UI 部分包含在此类和其他类中:

https://github.com/qt-creator/qt-creator/blob/master/src/plugins/debugger/breakhandler.cpp

...而真正的逻辑取决于引擎。有不同的调试器引擎,如 gdb、Windows 的 cdb、QML 调试器等)。

查看gdb引擎,有一个gdb进程在MI模式下运行。这种模式使程序可以很容易地解析 gdb 输出;尝试例如gdb -i=mi programToDebug。此外,文档可能会有所帮助:ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_211.html

Qt Creator 然后读取 gdb 进程的输出以显示调用堆栈等信息;参见例如https://github.com/qt-creator/qt-creator/blob/master/src/plugins/debugger/gdb/gdbengine.cpp#L244

所以我要做的是:

  1. 实现 UI 以设置断点、启动调试器等。
  2. 在自己的进程和机器模式下运行调试器(如果可用)
  3. 连接该进程的输入/输出以设置断点、显示调用堆栈等。

推荐阅读