《Win32多线程程序设计》学习笔记 第12章 调试
2010-12-25 20:55
260 查看
有计划的对付错误
在每一个你的假设指出做检验工作。进入一个函数时,确认所有状态,不要只是检查指针是否合法;如果可能,检查一下指针所指结构中的数据是否一致。
线程对话框
VC调试器支持多线程的情况。我们可以挂起要调试的线程之外的所有线程,从而将调试焦点放在某个线程身上。
[b]运转记录[/b]
就是使用输出如printf将程序的运行状态输出出来,用于调试,这些输出一般输出到标准输出,很容易重定向到文件中。在stdout中记录运行过程,并不能抱枕你看到的输出次序就是实际的运行次序,这是由于多线程版本的C Runtime library使用互斥保证每次只有一个线程使用stdout,所以在运行和写入stdout中间,可能发生context switch。
[b]内存记号(Memory trail)[/b]
将运转记录写向文件中,花费的时间可能会影响多线程的运行结果。将运转记录写到内存中可以改善这些情况,就是内存记号
char gMemTrail[2048];
char * pMemTrail = gMemTrail;
每当想输出某个东西到文件中,就写一个记号到MemoryTrail中
*pMemTrail++ = 'D';
当程序停在一个线程的断点时,我们可以通过查看内存内容来查看设置的内容。
[b]科学方法[/b]
为了将一个多线程版本的程序中的错误除尽,需要三种素养
耐心
决心
创造力
在每一个你的假设指出做检验工作。进入一个函数时,确认所有状态,不要只是检查指针是否合法;如果可能,检查一下指针所指结构中的数据是否一致。
线程对话框
VC调试器支持多线程的情况。我们可以挂起要调试的线程之外的所有线程,从而将调试焦点放在某个线程身上。
[b]运转记录[/b]
就是使用输出如printf将程序的运行状态输出出来,用于调试,这些输出一般输出到标准输出,很容易重定向到文件中。在stdout中记录运行过程,并不能抱枕你看到的输出次序就是实际的运行次序,这是由于多线程版本的C Runtime library使用互斥保证每次只有一个线程使用stdout,所以在运行和写入stdout中间,可能发生context switch。
[b]内存记号(Memory trail)[/b]
将运转记录写向文件中,花费的时间可能会影响多线程的运行结果。将运转记录写到内存中可以改善这些情况,就是内存记号
char gMemTrail[2048];
char * pMemTrail = gMemTrail;
每当想输出某个东西到文件中,就写一个记号到MemoryTrail中
*pMemTrail++ = 'D';
当程序停在一个线程的断点时,我们可以通过查看内存内容来查看设置的内容。
[b]科学方法[/b]
为了将一个多线程版本的程序中的错误除尽,需要三种素养
耐心
决心
创造力
相关文章推荐
- 《Win32多线程程序设计》学习笔记 第4章 同步控制之 事件(Event Objects) 和 interlocked variables
- 《win32多线程程序设计》学习笔记——关于C++类中的线程函数声明
- 《网络渗透技术》学习笔记(1)--Windows平台上一个最简单溢出程序的调试 zz
- Windows程序调试----第三部分 调试技术----第12章 非常规策略
- 《Erlang程序设计》学习笔记-第12章 接口技术
- 《Win32多线程程序设计》学习笔记 第4章 同步控制 摘要
- 《游戏编程入门》学习笔记6——帧率控制、用文本显示调试信息
- (转载)BOX2D V2.3.0 用户手册中文版(第12章)-调试绘图
- 《软件调试》学习笔记——003 (第一章 软件调试基础 part1)
- 学习笔记:AJAX调试时拒绝访问
- 《Win32多线程程序设计》学习笔记 第三章 快跑与等待
- ALSA声卡11_从零编写之调试——学习笔记
- 《Win32多线程程序设计》学习笔记 第17章 OLE ActiveX COM
- Android编程权威指南(第二版)学习笔记(四)—— 第4章 Android 应用的调试
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要(4)——Pthread线程调试
- 《软件调试》学习笔记——004 (第一章 软件调试基础 part2)
- 《Win32多线程程序设计》学习笔记——几种同步方式
- 《白帽子讲WEB安全》学习笔记之第12章 WEB框架安全
- linux调试技术学习笔记
- 《Win32多线程程序设计》学习笔记 第11章 GDI 与窗口管理