Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1285936
  • 博文数量: 196
  • 博客积分: 4141
  • 博客等级: 中将
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-21 20:04
文章存档

2019年(31)

2016年(1)

2014年(16)

2011年(8)

2010年(25)

2009年(115)

分类: 系统运维

2009-03-23 19:53:34

定制调试器

l  内存腐蚀错误

内存出错是一种普通的程序错误,但是却很难跟踪和定位。普通的断点,单步调试,和观察很难发现。因此,查看内存成了必须的手段之一。

通常的调试工具有集成内存和资源跟踪调试,比如说CodeGuard,他需要重新封装函数。这种错误可以自动检测:

  •  野指针;
  • 栈溢出;
  • 内存和资源泄露;
  • 函数调用参数;
  • API返回错误;
  •  异常;
  • 未初始化数据访问;
  •  构造和解析配对

另一种工具是在代码中插入一小段代码,以勾住比较重要的函数,不如说malloc(),free()。这种方法不需要重新编译和链接。

l逆向执行

当用户运行过快,想退回到之前某一点的状态的时候,调试器也应该支持这种功能。一般有以下几种方法可以实现:

  • 记录下一系列更改子进程的命令。当执行undo命令的似乎后,用户从头开始执行那些记录下的命令。记录的工作花的时间很少,但是当执行undo的时候,可能需要花很长的时间才能执行到用户期望的状态;
  • 另一种方法是在改变子进程状态之前,记录下该子进程的状态,执行undo的时候,恢复合适的状态。这种方法可能需要保存大量的数据,使得执行的过程很慢。

l  远程调试

远程调试使得调试器能够从目标应用程序分离开,避免了和目标进程相互影响。

远程调试器需要在目标机器上安装一个小的代理调试器。主调试器并不创建子进程或者期望操作系统通知它发生了什么事,而是通过接收和发送命令来实现的。

l 分布式目标调试

应用程序构建分布式目标对调试器来说是一个新的挑战。调试器应该使得目标之间尽可能的透明,除非该目标是我们要调试的。

远程过程调用是实现分布式目标的一种机制。

l  运行时调试辅助

  • 内嵌式仿真器;
  • 跟踪调试器;
  • 运行后调试器;

l  并行体系结构调试

阅读(2211) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~