即使你把输出导向到文件中,运转记录花费的时间所带来的冲击,仍然足够改变程序的执行结果。如果要改善这种情况,我必须回到一个我所谓的“Memory Trails”(内存记号)的低阶技术中。
为了使用 memory trail,你必须产生一个全局缓冲区,以及一个指向该缓冲区的全局指针。例如:

char gMemTrail[16384];
char *pMemTrail = gMemTrail;

每当想印出某些东西到屏幕上或文件中,你就写一个记号到 memory trail中。例如:

*pMemTrail++ = 'D';

你的程序中的每一个追踪点都应该写出一个不同的记号。不论什么时候你想要,或是在程序当掉之后,你可以利用调试器看看 memory trail 的内容,分析其间到底发生了什么事。它当然不像文字那么容易阅读,但总比乱猜的好。

有一个鲜为人知的调试器特性,可以帮助你观看这个缓冲区内容。当程序停在断点上时,选择 Visual C++ 的【View/Memory】,打开“内存窗口”。一旦窗口开启,双击程序中的全局变量,使它成为高亮度,然后把它拖拉到“内存窗口”中,于是你就会看到数据以字节形式表现出来。如果要切换为文字形式,请选按【Tools/Options】菜单项,并选择其中的【Debug】附页,然后在“内存窗口”中把【Format】设定为 ASCII。[这个非常的好,非常的有用]

现在每当你的程序在调试器中停下来,“内存窗口”就会把有变化的数据高亮度起来。这样就可以很方便地观察 memory trail 中哪些数据被加了进来。如果你需要储存更多信息,你可以使用一个 DWORDs 数组,放置整个观察集合。例如:

*pBuf++ = (5 << 16 | some_useful_value);
这可以把 5 存放到较高字,把另一个数值存放在较低字。“内存窗口”可以被设定为 Long Hex 模式,于是数据可以比较容易被解读。
Memory trails 可以大量降低彼此干扰的可能性,因为它既没有用到系统函数,也没有用到同步机制。然而也由于它不是同步操作,当两个线程同时写入一笔数据,memory trails 还是有可能遗失数据。如果你有许多线程,而其中有许多断点,这可能会造成严重的问题。

【查看--调试窗口--memory】

【工具---选项---调试---内存器窗口】

【结束语】:欢迎网友们推荐更多的,更好的调试方法

转载于:https://www.cnblogs.com/azbane/p/7714661.html

内存记号(Memory Trail)[自定义的名字] --调试方法相关推荐

  1. iOS 对付内存泄漏,来说说我的调试方法

    2019独角兽企业重金招聘Python工程师标准>>> 苹果在iOS5推出了ARC(自动引用计数)技术,此模式下编译器会自动在合适的地方插入retain.release.autore ...

  2. linux 内存管理 ppt,Linux内存管理 Memory Manager.ppt

    <Linux内存管理 Memory Manager.ppt>由会员分享,可在线阅读,更多相关<Linux内存管理 Memory Manager.ppt(24页珍藏版)>请在人人 ...

  3. GDB内存断点(Memory break)的使用举例

    本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一@小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! GDB内存断点(Memory break) ...

  4. HALCON: 内存管理(Memory Management)

    内存管理(Memory Management) .net框架的运行时环境CLR(公共语言运行时)有一种被称为垃圾收集器的机制,CLR使用它来从内存中移除不再需要的.net对象. 正如前面提到的,在导出 ...

  5. 【C语言】一组内存函数——memory

    hello~~,我是~小鹿,这是我的第二篇博客,算是接着上一篇的字符串函数写的吧,这一篇讲的是内存函数,能够直接操作内存,内存函数不需要知道被操作的内容类型,只需要告知内存即可. 有什么不对的地方希望 ...

  6. [Debug]内存问题的一些调试方法

    1,使用valgrind工具 valgrind使用介绍 valgrind官网 如果要使用图形化的界面,要安装QT,工具名字是valkyrie 通过top命令,/proc/meminfo看总内存,看每个 ...

  7. Linux内存不够调试,Linux系统内存错误调试方法

    而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由g ...

  8. linux内存不足+段错误,Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转]...

    产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来 ...

  9. linux 内存出错位置,Linux系统内存错误产生的原因及调试方法

    而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由g ...

  10. 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)

    Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转] Posted on 2008-09-05 14:52 猫头鹰 阅读(84) 评论(0)  编辑 收藏 引用 所属分类 ...

最新文章

  1. Linux系统如何安装AutoFs挂载服务
  2. oracle where order by,ORACLE SQL WHERE和ORDER BY
  3. redis实现数据库(一)
  4. 原 IOS之NSValue整理
  5. SQL Server2008数据库用户管理 (第三部分)
  6. Thread.Join 和 Task.Wait 方法
  7. 500多套微精品信小程序源码部分带后台,不同行业的源码集合,适合快速开发和自己学习
  8. WinCE下3G模块的调试
  9. MySQL基础笔记(14)-使用Amoeba和Docker搭建MySQL读写分离架构
  10. google浏览器缓存文件在哪里
  11. 用 GNS3 做CCNA网络实验(4)
  12. python依照概率抽样_统计概率思维之总体与抽样
  13. 计算机算法描述方式有哪些,算法的描述方法有哪几种
  14. 数字滚动插件——CountUp.js
  15. java处理图片与base64编码互相转换
  16. 【python小课堂专栏】python小课堂11 - 变量篇
  17. 使用Scrapy框架爬取88读书网小说,并保存本地文件
  18. 基于微信小程序的个人电台系统的设计与实现
  19. 西施陪他游湖,金庸为他写书,2000多年前的他有何过人之处?
  20. 【EasyUse】关于键盘加速键的几点思考

热门文章

  1. 大学c语言作业网站,西北农林科技大学c语言作业
  2. JS中的Error对象
  3. 依赖 netty spring_面试官:如何写好一个 Spring 组件?懵圈!
  4. Hive 入门练习题
  5. Hive from_unixtime函数入门
  6. Windows界面编程_Miniblink(2) 嵌入到Win32窗口里
  7. Commons IO 2.5-IOUtils
  8. 《编译与反编译技术实战》——1.2 词法分析生成器LEX
  9. 电脑出现的问题以及解决方法
  10. iOS8跳转到系统设置页