GDB MI接口解析器

时间:2015-02-19 10:04:48

标签: qt gdb

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

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

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

3 个答案:

答案 0 :(得分:1)

没有真正好的解析MI的方法。 MI已经相当陈旧,因此早于广泛采用XML和JSON。此外,更不幸的是,gdb(搜索bugzilla和列表存档)中存在一些已知的MI排放错误 - gdb的MI输出不符合MI语法的点。这些都没有固定,因为我们认为改变输出(没有碰到MI版本号,似乎没有人想要驱动的东西)会破坏现有的解析器而没有太多相应的好处。

好消息是已经存在一些可重用的解析器。所以我建议使用其中之一。 nemiver中的解析器是用C ++编写的,是一个可重用的库。但是,由于您已经在使用Qt,因此可以查看Qt Creator或KDevelop中的解析器。

也可以通过在Python中编写gdb来滚动自己的gdb接口。但是,gdb的Python API中可能存在一些漏洞,所以如果你也想在gdb Python层上进行攻击,我也会推荐它。

答案 1 :(得分:0)

Qt Creator本身有一个解析器(MI的一些超集),请参阅其源代码中的plugins / debugger / debuggerprotocol。{h,cpp}。这个(超集)协议也用于从Qt Creator"漂亮的打印"生成并作为LLDB集成的调试器>前端通道。

协议实现与Qt Creator的调试器插件的其余部分相当分离。它应该可以重复使用。

答案 2 :(得分:0)

有一个pygdbmi python库正是为了这个目的(当你最初提出问题时它不存在)https://github.com/cs01/pygdbmi

gdbgui是一个使用pygdbmi:https://github.com/cs01/gdbgui

的前端

玩得开心!

免责声明:我是开发人员。