我试图用python或c编写一个程序,可以使用gdb调试c代码。在
我读过solution of Tom和{a2}。但它们或多或少是用python编写gdb脚本的解决方案。因为我要使用armgdb调试嵌入式程序,所以我不能在gdb中启用python脚本。在
我的目标是创建gdb的高层抽象。例如,启动gdb,设置一些断点并在我的代码中继续。我还读了一些gdb/mi接口的资料。但是谁能告诉我如何使用gdb/mi接口来创建一个gdb进程并从c/python代码与gdb通信?(幸运的是,我的arm gdb支持gdb/mi接口)。在
Tags:
使用http://www.noah.org/python/pexpect/怎么样?它是http://en.wikipedia.org/wiki/Expect的python版本,对于使用外部命令自动执行任务非常有用。在
您列出的链接更多的是“从GDB调用Python”,但是您要问的是如何从Python或C调用GDB,GDB/MI接口是最好的选择。Eclipse、Emacs和KDevelop使用GDB/MI抽象调试接口。我个人在ARM、AVR和H8S上使用过三个不同的交叉编译gdb版本的KDevelop。在
谷歌搜索得到了一个Python GDB wrapper,应该可以让你开始。在
正如上面的评论中所承诺的,我已经将我的(早期的、不完整的、几乎肯定有缺陷的)ruby作品发布到http://github.com/mcarpenter/rubug。在
这里有一个例子(你可以在 ^{} )。函数
check_for_crash
是可以调用的回调函数 在程序factorial
被设置为运行后。断点采用函数名 (fac
;前导冒号表示这是一个 ruby符号在这里是一个轻量级的符号 字符串)。在这是公平的警告你,代码可能是。。。粗俗的。目前(这是我停止的地方)没有什么工作(在我工作中途进行gdb更新之后,请参见 语法以下)。在
在相同的目录中有很多例子 但可能会有帮助的名称。到(尝试!)运行它们,您需要执行以下操作:
^{pr2}$考虑到写这篇文章的时间,你应该用ruby1.8 如果你有选择的话(我当时不喜欢1.9,可能有 1.9)下的字符串编码问题。在
响应的解析由treetop执行 http://treetop.rubyforge.org,一个PEG解析器。用 新鲜的眼睛我确信它可以简化。你需要安装这个 (以及任何其他必需的gem)使用
gem install ...
。在如果你做Python疗法,还有一些建议:
文档
很少有外部的“使用GDB调试” (第22章)。我把这个PDF文件和ch.22作为一个单独的文件扔进 存储库的docs部分。在
异步
协议是不同步的(一开始我以为这是 命令/响应类型协议,这是一个错误)。如果我愿意 重新实现这个我可能会用事件机或者 而不是滚动我自己的
select()
循环。在语法
语法有点。。。令人困惑。尽管文件 (27.2.2)声明响应“由零个或更多带外组成 记录后面有一个结果记录(可选)::
你应该知道,因为任何东西都可以在任何时候到达
read()
显然可以返回async/result/more 异步/终止符(!)。例如,我在当前的gdb中看到了这一点:以
^
开头的行是一个结果记录,所有其他行都是异步的(那么 终结者)。这似乎是 规范。在速度
我主要关注的是安全,我对MI感兴趣 GDB也是自动的,用于二进制检查 慢(在调试器中启动程序的成本)。基督教青年会。在
MI/CLI映射
在标准gdb CLI命令集中有一些东西 无法使用MI命令实现。我有骨架 这样的代码:
(我认为,对于我们这些非MI专家,但对gdb知识渊博的用户来说,这是非常好和明确的)。 我现在不记得那些有问题的事情是什么了(已经一年多了) 但如果这些神经元真的被激活了,我会回来 更新这个。在
替代品
我刚开始的时候 在这条路上,我发现了一个Jamis Buck的博客: http://weblog.jamisbuck.org/2006/9/25/gdb-wrapper-for-ruby这包装了一个 popen()中的gdb命令行会话,这让我有点畏缩。在 特别的人可能会认为它是脆弱的,因为gdb不同意 保证CLI输出的稳定性。你可以(或不可以) 喜欢这种方法。在
如果您使用的是windows,那么PyDbg/PeiMei可能会感兴趣:http://code.google.com/p/paimei/
你可能还喜欢这本书Grey Hat Python: Python Programming for Hackers(Seitz)。同样,大部分基于windows,但可能会被证明是鼓舞人心的。在
相关问题 更多 >
编程相关推荐