使用 CDT 调试器,第 2 部分: 使用 Eclipse CDT 和 MI 访问 gdb
2009-12-19 00:00:00 来源:WEB开发网这说明 GDBCDIDebugger2 执行开始调试进程的 createSession() 方法。当 CDT 调用该方法时,它提供给调制器包含配置参数的启动对象、即将调试的可执行文件的名称和进程监视器。GDBCDIDebugger2 使用这些信息形成启动 gdb 可执行文件的字符串:
gdb -q -nw -i mi-version -tty pty-slave executable-name 。
GDBCDIDebugger2 为正运行的 gdb 可执行文件创建 MIProcess,然后创建两个会话对象来管理剩余的调试进程:MISession 和 Session。MISession 对象管理与 gdb 的通信,Session 对象把 gdb 会话连接到 第 1 部分 中描述的 CDI。本文接下来具体讨论这些会话对象。
MISession
启动 gdb 后,GDBCDIDebugger2 首先要做的就是创建一个 MISession 对象。这个对象使用三对对象处理所有对 gdb 调试器的访问:
OutputStream(向 gdb 进程发送数据)和 InputStream(接收响应)
输入和输出 CommandQueue(持有 MI 命令)
TxThread(把输出 CommandQueue 的命令发送到 OutputStream)和 RxThread(发送 InputStream 的接收命令并将其放到输入 CommandQueue)
示例将验证这些对象如何一起工作。如果远程执行调试会话,CDT 通过向 gdb 发送 remotebaud 命令(后跟波特率)发起通信。为了完成该过程,它调用 MISession 的 postCommand 方法,该方法把 remotebaud 命令添加到会话的输出 CommandQueue 中。这会唤醒 TxThread,它将命令写入与 gdb 进程连接的 OutputStream 中。它还将命令添加到会话的输入 CommandQueue 中。
同时,RxThread 不断读取来自 gdb 进程的 InputStream。当新输出可用时,RxThread 通过 MIParser 发送新输出来获得结果记录和 OOB 记录。然后搜寻输入 CommandQueue 以查找触发输出的 gdb 命令。如果 RxThread 包含 gdb 的输出和相应的命令,它将创建一个 MIEvent 来传播调试器状态的改变。
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
赞助商链接