Qt GDB MI接口解析器

Qt GDB MI接口解析器,qt,gdb,Qt,Gdb,我正在尝试写一个GDB前端。我使用GDB调试嵌入式目标,特别是使用ARM处理器。我以前使用过Eclipse,但我不太喜欢它。在工作中,我们使用Lauterbach Trace32,这是我使用过的最舒适的调试器之一。这就是为什么我开始了一个项目,我试图实现一个与GDB前端非常相似的应用程序,专门用于嵌入式调试 但是,我已经实现了一些非常基本的命令,比如查看源代码、查看目标的寄存器等等,这些命令都很有效。目前,我正在实现断点。但是为了这个我需要一些帮助 我在Linux上使用Qt(与Qtcreator

我正在尝试写一个GDB前端。我使用GDB调试嵌入式目标,特别是使用ARM处理器。我以前使用过Eclipse,但我不太喜欢它。在工作中,我们使用Lauterbach Trace32,这是我使用过的最舒适的调试器之一。这就是为什么我开始了一个项目,我试图实现一个与GDB前端非常相似的应用程序,专门用于嵌入式调试

但是,我已经实现了一些非常基本的命令,比如查看源代码、查看目标的寄存器等等,这些命令都很有效。目前,我正在实现断点。但是为了这个我需要一些帮助


我在Linux上使用Qt(与Qtcreator一起)进行我的项目,因此我为后台运行的gdb设置了一个QProcess。我使用GDB Mi2接口与GDB通信。然后,我可以使用write()发送命令,并通过信号接收来自GDB的响应。这很有效,但是这种MI格式的GDB的答案很难解析。有谁能给我一个提示,怎样才能优雅地做到这一点?我试图构建一个解析器,这很有效,但在我看来,这是一个太复杂的方法。有没有更好的方法来解析GDB响应?

没有真正好的方法来解析MI。MI非常古老,因此早于XML和JSON的广泛采用。此外,对您来说更不幸的是,gdb(搜索bugzilla和列表存档)中存在一些已知的MI发射错误——gdb的MI输出不符合MI语法的地方。这些问题没有得到解决,因为据判断,更改输出(不影响MI版本号,这似乎是没有人愿意驱动的)会破坏现有的解析器,而没有多少相应的好处

好消息是已经存在一些可重用的解析器。所以我建议使用其中一种。“代码> NIVEVE/CODEC>中的解析器是用C++编写的,是一个可重用的库。但是,由于您已经在使用Qt,您可以在Qt Creator或KDevelop中查看解析器


也可以通过在Python中编程gdb来滚动您自己的gdb接口。然而,gdb的Python API中可能存在一些漏洞,因此我仅在您还想对gdb Python层进行黑客攻击时推荐它。

Qt Creator本身有一个MI协议(某些超集)的解析器,请参阅其源代码中的plugins/debugger/debuggerprotocol.{h,cpp}。此(超集)协议还用于从Qt Creator的“漂亮打印”产品中捕获数据,并用作LLDB集成的调试器->前端通道


协议实现与Qt Creator的调试器插件的其余部分有很好的分离。它应该是可重用的。

pygdbmi python库正是为了这个目的而存在的(当您最初提出问题时,它并不存在)

gdbgui是利用pygdbmi的前端:

玩得开心


免责声明:我是开发者

谢谢你的回答。我看起来很复杂,但看起来很复杂。我还看了一下,它的源代码要简单得多。Com类实现了与gdb的通信,但是它也有点复杂,如果您能帮助我理解它就好了。我现在已经设法在我的程序中包含了这个类,我甚至可以向gdb发送命令,但是对于这个类来说,接收答案似乎是一项更复杂的任务。我恐怕对此一无所知。我甚至不记得以前听说过这个GUI:)当然,另一个选择是使用一个像那样的现有GUI,并修改它,使其以您想要的方式工作。那么你可能根本不需要处理gdb和MI。虽然这个线程已经有一年多的历史了,但我想让你知道Lauterbach TRACE32(你认为它是舒适的调试器)也可以用作gdb前端。然而,这当然不是免费的。