如何在我自己的完整系统模拟器上实现GDB调试?

时间:2014-03-01 00:56:23

标签: c++ debugging gdb simulator stub

我正在为C ++中的自定义微控制器编写一个模拟器程序。我希望用户能够使用GDB调试他们的程序,就像它在真实目标上运行一样。

我发现的最佳解决方案似乎涉及为我的模拟器编写一个GDB存根,它将使用网络协议与GDB通信。但是,这涉及编写一个完整的程序,该程序将负责与GDB本身的网络通信和通信。

这似乎有点矫枉过正,因为客户端和目标将在同一台机器上运行。有没有更简单的方法?如果没有,随着GDB的普及,我会认为存在一个库,或者至少是一些例子,以帮助在正常的桌面PC程序中嵌入存根?

2 个答案:

答案 0 :(得分:1)

您当然可以编写作为主应用程序一部分的“存根” - 您需要做的就是收听相关的通信通道,并对发送的命令/数据做出适当的响应。

这篇文章很好地描述了编写存根的过程: http://www.embecosm.com/appnotes/ean4/embecosm-howto-rsp-server-ean4-issue-2.html

它还讨论了(尽管简要地说)“使用模拟器”。

答案 1 :(得分:1)

GDB还支持将“嵌入”模拟器支持到gdb本身。这是由gdb中的“target sim”命令调用的。

有关已经实现的许多模拟器,请参阅gdb的sim子目录。