# 12.2. 使用内置调试器

## 12.2.1. 树视图和输出视图窗口中的变化

如果你选择内置的调试器,树视图和输出视图中会增加四个标签.

### 12.2.1.1. 树状视图窗口中

- VAR标签: 暂停程序在当前位置的局部变量的树状视图.同时,你可以看见 在调用该函数的函数中的变量.VAR标签还包含了观察窗口.你可以查看全局变量或某一 个局部变量而不是一大串局部变量的值.

### 12.2.1.2. 输出视图窗口中

- 断点 : 断点的列表及其状态.

- 帧栈 : 调用栈.

- 反汇编 : 当前被执行的机器代码.

## 12.2.2. 在面板中和调试按钮的变化

### 12.2.2.1. 面板中

在你启动调试器后会有两个普通和可按下的按钮来控制调试功能.

### 12.2.2.2. 调试菜单中

党开始调试时,10条控制调试的菜单变为可用.

已实现的功能:

- 运行: 从当前位置继续程序执行.

- 运行到光标处: 执行程序直到光标的当前位置

- 单步跳过: 执行一行代码并停在同一源文件的下一行.这会运行任何遇 到的函数直至其符合上述条件.

- 单步跳过指令: 象上面一样,执行一条机器指令.

- 单步进入: 刚好执行一行代码.即如果存在,你将"单步进入"函数.

- 单步进入指令: 象上面一样执行一条机器指令.

- 单步跳出: 运行到当前栈帧(函数)结束.

- 浏览器: 允许对数据进行各种查看. 当前实现的查看有:

  1. 内存地址

  2. 反汇编代码

  3. 当前寄存器

  4. 当前库

- 暂停: 暂停程序执行.

- 停止Stop: 停止程序执行并退出调试器.

## 12.2.3. 细节

### 12.2.3.1. 断点

在源文件中可以设置断点或观察点.两种类型的断点都可以在任何时间设置,而观察 点只在变量的局部域中有意义.当你处理全局变量的时候,观察点更为有用.

### 12.2.3.2. 设置/取消断点

只需要点击一下就可以设置/取消断点.在编辑器中你需要设置断点行左边的 "图标"边界上点击.再次点击就取消了该断点.

### 12.2.3.3. 通过菜单控制断点

在断点列表或编辑器的图表边界中的断点上点右键,会出现一个关于断点的菜单. 你可以通过它来删除断点,清除所有的断点或者编辑断点.

### 12.2.3.4. 编辑断点

使用上面的菜单现实断点编辑对话框.包括以下一些域:

1. 条件: 输入gdb中断程序执行的条件.

2. 忽略次数: 你希望gdb在停止程序执行前忽略该断点多少次.

3. 激活Enable: 激活以后,gdb将停于此处.如果禁止gdb则忽略.

### 12.2.3.5. 清除所有断点

删除为该程序设置的所有断点

### 12.2.3.6. 设置/取消观察点

在变量视图中的某个变量上点击鼠标右键.你可以通过现实的弹出式菜单在局部变量 上设置观察点.该功能局限于局部变量所在的域.党变量超过了其有效域,观察点被删 除.

警告:这可能会带来问题,所以在为局部变量设置观察点时要小心.

观察点也可以通过右击前一个遇到的观察变量并选择"设为观察点".

### 12.2.3.7. 设置/取消观察变量

在变量视图的底部有一个"观察"域,你可以在这里输入希望显示在列表中的变量名字. 输入变量名并按回车或点击旁边的"添加"按钮.鼠标右击树状试图中的观察变量会出 现弹出式菜单,你可以通过它将观察变量删去.

你也可以在编辑窗口中的某个变量上点击鼠标右键,通过显示的菜单选择"查看:变量名" 来添加观察变量.

### 12.2.3.8. 改变变量的值

通过观察变量实现.如果你有个变量叫"test",在观察域中输入"test=5"并将其添加到 列表中.注意,"test"在程序每次被断点中断时都会被设为5,所以你一旦设置了该变量, 往往需要从视图中删除掉.