摘要:本文所讨论的“内存”主要指(静态)数据区、堆区和栈区空间(详细的布局和描述参考《Linux虚拟地址空间布局》一文)。数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量。函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存。
阅读全文
随笔分类 - 异常诊断与调试
摘要:有没有这样的情况,无法静态的通过启动和退出来查找内存泄露,比如网络游戏,你总不能直接关游戏那玩家怎么办? 现在vld支持release,我们可以动态的找。 1.在release版本使用vld了。<PS1> #define VLD_FORCE_ENABLE #include <vld.h> 2.支持g
阅读全文
摘要:前提 同Debug版本在VC中配置好VLD的相关信息,拷贝 Visual Leak Detector\bin\Win32目录下所有的文件和vld.ini到工程目标路径下。 强制检测 在程序入口处的cpp中,定义强制检测宏和包含vld头文件 #define VLD_FORCE_ENABLE #incl
阅读全文
摘要:1. 任务管理器 任务管理器可以说是最易获取的系统工具,同时它具有生成转储文件的功能。但要注意的是在64位操作系统上面,默认启动的是64位的任务管理器。使用任务管理器生成转储文件需要遵循一个原则:用32位任务管理器给32位进程(无论该进程是运行在32位还是64位系统上面)生成转储文件,用64位任务管
阅读全文
摘要:定位内存泄漏是C++的一个大问题 我们可以通过如下方式进行定位: 在 debug 模式下,可以看到如下信息: 此时我们注意大括号的内容,这就是可以我们的程序内存泄漏的地方。 将上面注释掉的代码加入,并将大括号的数字填入,就可以让程序停在内存泄漏的地方。 如下,这里我们让程序停在 556 处 参考:h
阅读全文
摘要:前言 一般来说.NET程序员是不用担心内存分配释放问题的,因为有垃圾收集器(GC)会自动帮你处理。但是GC只能收集那些不再使用的内存(根据对象是否被其它活动的对象所引用)来确定。所以如果代码编写不当的话,仍然会出现内存泄漏的问题,常见的情况有:一个静态变量引用了一个应该被释放的对象,事件注册后不解除
阅读全文
摘要:在学习FPS3000人脸关键点定位算法时,发现github上的源码,存在大量的内存泄漏问题,在训练的时发现内存一直在增长,测试的时候也存在内存无法彻底释放的问题。 一直以为是存放模型参数vector<class>结构的问题, 采用以下方法手动释放,仍然无法解决问题。 vector<class> re
阅读全文
摘要:转载地址点击打开链接 1、生成dmp的程序 #include <dbghelp.h> #pragma comment(lib, "dbghelp.lib")//设置异常处理回调函数SetUnhandledExceptionFilter(UnhandledExceptionFilter);//异常处理
阅读全文
摘要:采用下面的方法。重新编译了一下依赖的库,OK了。 问题描述: 今天用VS2010编译一个在VS2008下Coding的工程的时候,VS给出了一堆链接错误信息,如下图所示: 在ErrorList里面列出了34个链接错误信息,但仔细看的话,其实很多都是重复的,只有两三个外部符号未正确解析,如下: "pu
阅读全文
摘要:关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 目录 关于api-ms-win-crt-runtimel1-1-0dll缺失的解决方案 目录 安装VC reditexe程序解决 安装KB2999226补丁程序 更新到Win7 SP1 无法安装更新解决方案-删除目录
阅读全文
摘要:error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义 今天遇到了同样的问题,搜索搜到了这里,后来解决了。。。。。。。。 创建解决方案时,用的是WIN32 DLL,添加了MFC ATL的支持,自动生成文件中是没有现成的DllMain函数的。后来需要用到这个入口函
阅读全文
摘要:
阅读全文
摘要:原文链接:5 simple ways to troubleshoot using Strace 我很意外大部分人都不知道如何使用strace。strace一直是我的首选debug工具,因为它非常的有效,很多问题都能够用它进行排查。 strace是什么? Strace是一个用来跟踪系统调用的简易工具。
阅读全文
摘要:我们可以通过 1) gdb prog_name -> r 用在逐步调试自己的程序时 2) gdb -> attach process_id 正在运行中的后台程序突然卡在了某个地方,先ps再gdb/attach 3) gdb prog_name core 程序core掉了 三种方式对一个程序进行调试;
阅读全文
摘要:只做工作总结备忘之用。 正在烧镜像,稍总结一下进来改bug遇到的问题。 一个项目里要用到L3 switch的nat,vrrp功能,但实地测试中偶然出现write file挂死的情况,但不是必现。交付在即,于是加调试信息,反复跑配置的脚本,定位bug。 一,期初怀疑是vtysh与vrrpd进程通信出现
阅读全文
摘要:摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来。这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手段。本文对LWP和strace命令做了简明扼要的介绍,并通过一个实例来说明如何运用。总而言之,LWP
阅读全文
摘要:gdb 调试多线程如果目标进程已经core dump了,那么 gdb -c core xxx xxx是对应的程序文件。如果目标进程还在运行,通常此时用于调试线程死锁的情况。有两种方法一是 gdb -p xxx xxx是该进程的进程ID或者用gcore xxx先获取对应进程的core,他会生成一个co
阅读全文
摘要:线程有自己的寄存器,运行时堆栈或许还会有私有内存。 gdb提供了以下供调试多线程的进程的功能: * 自动通告新线程。 * \ "thread THREADNO\ ",一个用来在线程之间切换的命令。 * \ "info threads\ ",一个用来查询现存线程的命令。 * \ "thread app
阅读全文
摘要:一、多线程调试 多线程调试重要就是下面几个命令: info thread 查看当前进程的线程。 thread <ID> 切换调试的线程为指定ID的线程。 break file.c:100 thread all 在file.c文件第100行处为所有经过这里的线程设置断点。 set scheduler-
阅读全文
摘要:GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说GDB主要调试
阅读全文