WEB开发网
开发学院软件开发Java 使用 CDT 调试器,第 2 部分: 使用 Eclipse CDT 和... 阅读

使用 CDT 调试器,第 2 部分: 使用 Eclipse CDT 和 MI 访问 gdb

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 这说明 GDBCDIDebugger2 执行开始调试进程的 createSession() 方法,当 CDT 调用该方法时,使用 CDT 调试器,第 2 部分: 使用 Eclipse CDT 和 MI 访问 gdb(4),它提供给调制器包含配置参数的启动对象、即将调试的可执行文件的名称和进程监视

这说明 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 来传播调试器状态的改变。

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 CDT 调试器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接