摘要:使用代码手工生成dmp文件SetUnhandledExceptionFilter为每个线程设置SetUnhandledExceptionFilter(MyCallBack),(必须在每个线程中启动时调用一次,否则造成无法进入回调函数中)这样该线程中发现未处理的SEH异常时就会进入到MyCallBack 回调中.无聊的是虽然MyCallBack 的参数是SEH异常的结构体指针,但C++异常也会进入到MyCallBack 中.所以只要SetUnhandledExceptionFilter 就能抓到C++的异常了.按C++标准,未处理的C++异常应当是触发unexpected.而MS 放出话说它的编
阅读全文
03 2014 档案
摘要:在MFC中隐藏运行界面确实花花点功力。 针对对话框程序,一种不是很好地实现方法是在OnPaint函数中添加如下代码:CWnd::ShowWindow(SW_HIDE);添加后执行会发现屏幕会闪烁一下之后只在后台运行。www.2cto.com 有一种好方法,就是在OnInitDialog(...)中加入以下的代码:SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW);ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 这样,运行对话框程序之后,就不会出现对话框界面了。
阅读全文
摘要:之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的!如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.hMiniDump.cpp1、在CXXDlg::OnInitDialog()中添加这样一段:BOOL CTestDlg::OnInitDialog(){ CDialog::OnInitDialog(); // ...... SetUnhandledExceptionFilter(CrashReportE...
阅读全文
摘要:之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.h[cpp]view plaincopyprint?#include#include//#include"dbghelp.h"//#defineDEBUG_DPRINTF1//allowd()//#include"wfun.h"#pragmaoptimize("
阅读全文
摘要:Effective minidump简介在过去几年里,崩溃转储(crash dump)成为了调试工作的一个重要部分。如果软件在客户现场或者测试实验室发生故障,最有价值的解决方式是能够创建一个故障瞬间的应用程序状态镜像,然后可以在开发者的机器上通过调试器进行分析。第一代的crash dump通常被称为“全用户转储(full user dump)”,它包含了进程的虚拟内存的全部内容。毫无疑问,这样的dump对于事后调试非常有价值。但是,这样的dump经常非常大,使得通过电子方式发送给开发者非常困难,甚至没法完成。另外,没用公共接口可以通过程序调用来创建dump,我们必须依赖于第三方工具(例如,Dr
阅读全文
摘要:我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好不过了。本文介绍和调用椎栈相关的几个函数。NAMEbacktrace, backtrace_symbols, backtrace_symbols_fd - support for application self-debuggingSYNOPSIS#include int backtrace(void **buffer, int size);char **backtrace_symbols(voi
阅读全文
摘要:IntroductionOne of the revolutionary features of C++ over traditional languages is its support for exception handling. It provides a very good alternative to traditional techniques of error handling which are often inadequate and error-prone. The clear separation between the normal code and the erro
阅读全文
摘要:C++语言的运行时环境是基于栈的环境,堆栈跟踪(tracestack)就是程序运行时能够跟踪并打印所调用的函数、变量及返回地址等,C++异常中的堆栈跟踪就是当程序抛出异常时,能够把导致抛出异常的语句所在的文件名和行号打印出来,以及把调用抛出异常的语句的函数以及其它上层函数信息都打印出来。1. 为什么需要堆栈跟踪当你在开发程序时,你是否曾遇到过程序运行过程中突然当机,而你不知道哪一行代码出的问题;你是否曾遇到过程序调试过程中突然抛出异常,而你不知道哪一行代码出的问题;你是否曾遇到过当你在单步调试时突然抛出异常而你却忘了单步执行到哪一步时抛出的异常,于是你只好重来一次。Beta程序在客户那里试运行
阅读全文
摘要:难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下:VC调试篇设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configurati
阅读全文
摘要:http://www.cppblog.com/Walker/archive/2012/11/08/146153.htmlhttp://blog.sina.com.cn/s/blog_48f93b530100fsln.html在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了。因为release版本来就少了很多调试信息,更何况一般都是发布出去由用户使用,crash的现场很难保留和重现。本文将给出几个解决方案,完成对release版应用程序crash错误的调试。(本文只讨论Windows平台MSVC环境
阅读全文
摘要:BitBlt该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。原型:BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);参数: hdcDest:指向目标设备环境的句柄。nXDest、nYDest:指定目标矩形区域左上角的X轴和Y轴逻辑坐标nWidth、nHeight:指定源和目标矩形区域的逻辑宽度和逻辑高度。hdcSrc:指向源设备环境的句柄。nXSrc、nYS
阅读全文
摘要:自己平时收集的一些技巧与心得,这里分享出来,普及一下知识。 1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。 注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下Qui
阅读全文
摘要:1案例描述作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭。请与您的供应商联系。呵呵,这句微软的“名言”,恐怕是程序员最怕见也最常见的东西了。在一个大型软件的测试过程中,初期出现程序崩溃似乎成了不可避免的事。其实测试中出现程序崩溃并不可怕,反而是测试的成功。作为开发的我们更需要关心的是程序中的哪个函数或哪一行导致了系统崩溃,这样才能有针对性的进行改正。本文描述了自己总结的几种定位崩溃的办法。2案例分析以下是几种常见的崩溃现象及对应的处理办法:1. 对于Release版本必现的崩溃且在Debug版本上也崩溃的程序
阅读全文
摘要:源代码下载 在PC机上,对于YUV格式的视频如YV12,YUY2等的显示方法,一般是采用DIRECTDRAW,使用显卡的OVERLAY表面显示。OVERLAY技术主要是为了解决在PC上播放VCD而在显卡上实现的一个基于硬件的技术。OVERLAY的出现,很好的解决了在PC上播放VCD所遇到的困难。早期PC处理能力有限,播放VCD时,不但要做视频解码工作,还需要做YUV到RGB的颜色空间转换,软件实现非常耗费资源,于是,YUV OVERLAY表面出现了,颜色空间转换被转移到显卡上去实现,显卡做这些工作是具有天生优势的。 随着显卡技术的发展,OVERLAY的局限性也越来越充分的暴露出来。一般显卡只支
阅读全文
摘要:一、C++成员变量初始化1、普通的变量:一般不考虑啥效率的情况下可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行2、static静态变量(本地化数据和代码范围):static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值。在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外的其它函数访问。在模块内的static函数只可被这一模块内的其他函数调用,这个
阅读全文
摘要:一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐
阅读全文
摘要:深入理解计算机各种类型大小(sizeof)Cpp代码//Exampleofthesizeofkeywordsize_ti=sizeof(int); structalign_depends{ charc; inti; }; size_tsize=sizeof(align_depends);//Thevalueofsizedependson//thevaluesetwith/Zpor//#pragmapackintarray[]={1,2,3,4,5};//sizeof(array)is20//sizeof(array[0])is4size_tsizearr=//Countofitemsinarr
阅读全文
摘要:在InitInstance里边可以获取123456789101112if(bInit){//TODO:在此添加您自己的模块初始化代码。g_szOcxPath=this->m_pszHelpFilePath;g_szOcxName=this->m_pszExeName;g_szOcxName+=".HLP";intnTmp=g_szOcxName.GetLength();nTmp=g_szOcxPath.GetLength()-nTmp;g_szOcxPath=g_szOcxPath.Left(nTmp);}
阅读全文
摘要:源代码下载 在PC机上,对于YUV格式的视频如YV12,YUY2等的显示方法,一般是采用DIRECTDRAW,使用显卡的OVERLAY表面显示。OVERLAY技术主要是为了解决在PC上播放VCD而在显卡上实现的一个基于硬件的技术。OVERLAY的出现,很好的解决了在PC上播放VCD所遇到的困难。早期PC处理能力有限,播放VCD时,不但要做视频解码工作,还需要做YUV到RGB的颜色空间转换,软件实现非常耗费资源,于是,YUV OVERLAY表面出现了,颜色空间转换被转移到显卡上去实现,显卡做这些工作是具有天生优势的。 随着显卡技术的发展,OVERLAY的局限性也越来越充分的暴露出来。一般显卡只支
阅读全文
摘要:先说实在的:最终解决办法是实现IDocHostUIHandler接口,在GetHostInfo方法里解决,但“实现接口”意味着QueryInterface、AddRef、Release三个方法必须实现,所以相关代码是:class CMyWebBrowser : public IDocHostUIHandler{public: CMyWebBrowser() { m_cRef = 0; } virtual ~CMyWebBrowser() {} LONG m_cRef;private: HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid...
阅读全文
摘要:摘要:数字签名SIGN保证控件在下载时候的安全性。如果你的代码已经经过数字签名,即使用户IE的安全设置很高也能下载,安装并登记。但是在页面上初始化,或者用脚本运行这个控件,为了保证安全性,还需要进行MARK。 数字签名SIGN 曹晓峰 摘要:数字签名保证控件的安全性。数字签名使用证书。证书一般有个人证书和授信公司证书。个人证书是对个人的信任,由个人承担责任,控件每次下载时需要进行确认。公司证书是由第三方公司发布的,保证控件的安全性,公司证书需要付费。Windows授信的证书公司有VeriSign,SecureSign等等。由这些公司证书签名的控件在下载的时候不需要确认。 一.工具...
阅读全文
摘要:我们在编写ActiveX控件时,如果用在浏览器中,经常都会弹出现在运行的脚本不安全的提示, 如果给客户使用,将会带来极大不便。按照MSDN的介绍通常有两种一种是实现IObjectSafe接口,一种是通过修改注册表的方法。一般如果用ATL开发ActiveX控件,就用实现ObjectSafe接口的方法。如果用MFC开发,我觉得还是用修改注册表的方法比较方便。下面我们将第二种方法:要包括两个文件1.#include "comcat.h"2.#include "Objsafe.h"// 本控件的CLSID,注册表用1.constGUID CDECL CLSID_
阅读全文
摘要:本文与OCX控件避免弹出安全警告的类http://www.cnblogs.com/lidabo/archive/2013/03/26/2981852.html 有些类似,只不过增加了几行代码(红色标注)1.要加一个头文件: #include 2.在控件头文件中加入: ////////////////////////////////////////////////////////////////////////// //安全接口实现 DECLARE_INTERFACE_MAP() BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety) STDMETHOD_...
阅读全文
摘要:Windows Registry Editor Version 5.00[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap/Ranges]@=""[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ZoneMap/Ranges/Range100]"*"=dword:00000002":Range"="
阅读全文
摘要:当我们通过CWnd::CreateControl()动态创建ActiveX控件时,Windows消息并不会被发送给我们的由CWnd派生得控件类。例如,即使我们为WM_KILLFOCUS消息创建了句柄,这个句柄也是不会被调用的。(不信你试试:))引起这个问题的原因时,CWnd::CreateControl()并不会使我控件的HWND子类化。知道了原因,要解决问题就不难了。我们只要在控件创建之后使它子类化就行了。通过一下步骤可以实现:1.当然是添加控件啦,先生成控件的C++包容类。2.再要创建控件的类中声明成员变量,此成员变量是包容类的指针对象。3.在包容类的头文件中添加://{{AFX_MSG(
阅读全文
摘要:特色 迅捷是一个功能强大的C/C++源代码分析软件。可以处理数百万行的源程序代码。支持标准及K&R风格的C/C++。对每一个打开的源代码工程,通过建立一个包含丰富交叉引用关系的数据库,显示其所含的各种信息:所有的源文件、所有的头文件、所有的代码文件、词汇索引、索引结果、文件包含关系、宏定义、数据结构和函数定义、可扩展的函数定义、函数调用关系、分文件夹的定义目录、构造层次、诊断性输出等。仅须按一键就可以非常方便地扩展各种类型的定义和调用关系。所有这些结合起来帮助用户快速地阅读、理解、研究和维护关键或大型代码库。 包含各种友好的用户界面效果,如对窗口的标签化排列、任意分隔、自动隐藏、浮动、
阅读全文
摘要:绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力。不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了。如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具。函数调用关系图(call graph)是图(graph),而且是有向图,多半还是无环图(无圈图)——如果代码中没有直接或间接的递归的话。Graphviz是专门绘制有向图和无向图的工具,所以很多cal
阅读全文
摘要:CodeViz是《Understanding The Linux Virtual Memory Manager》(at Amazon,下载地址在页尾)的作者Mel Gorman写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有egypt、ncc)。其基本原理是给 GCC 打个补丁,让它在编译时每个源文件时 dump 出其中函数的 call graph,然后用 Perl 脚本收集并整理调用关系,转交给Graphviz绘制图形。CodeViz 原本是作者用来分析 Linux virtual memory 的源码时写的一个小工具,现在已经基本支
阅读全文
摘要:1文档类 (1)Doxygen 参考站点:http://www.doxygen.org Doxygen是一种适合C风格语言(如C++、C、IDL、Java甚至包括C#和PHP)的、开放源码的、基于命令行的文档产生器。 (2)C++2HTML 参考站点:http://www.bedaux.net/cpp2html/ 把C++代码变成语法高亮的HTML (3)CodeColorizer 参考站点:http://www.chami.com/colorizer/ 它能把好几种语言的源代码着色为HTML (4)Doc-O-Matic 参考站点:http://www.doc-o-ma...
阅读全文
摘要:局域网入侵最简单了。我教你方法,但教了你所惹出的事本人概不负责!1.取得对方IP地址如XX.XX.XX.XX,方法太多不细讲了。 2.判断对方上网的地点,开个DOS窗口键入 TRACERT XX.XX.XX.XX 第4和第5行反映的信息既是对方的上网地点。 3.得到对方电脑的名称,开个DOS窗口键入 NBTSTAT -A XX.XX.XX.XX 第一行是对方电脑名称 第二行是对方电脑所在工作组 第三行是对方电脑的说明 4.在Windows目录下有一文件名为LMHOSTS.SAM,将其改名为LMHOSTS,删除其内容,将对方的IP及电脑名按以下格式写入文件: XX.XX.XX.XX 电脑名 5.
阅读全文
摘要:Windows:使用CoCreateGuid函数(GUID)[cpp]view plaincopyprint?#include#include#defineGUID_LEN64intmain(intargc,char*argv[]){charbuffer[GUID_LEN]={0};GUIDguid;if(CoCreateGuid(&guid)){fprintf(stderr,"createguiderror\n");return-1;}_snprintf(buffer,sizeof(buffer),"%08X-%04X-%04x-%02X%02X-%02
阅读全文
摘要:用一个实际代码来说明。class A {public: staticvoid staticmember(){cout<<"static"<<endl;} //static member void nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic member virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member};int main(
阅读全文
摘要:此文章将介绍页面在 Windows8 适用于桌面版的 Internet Explorer 中与在新 Windows UI 的 Internet Explorer 中的不同表现。Windows 8 中的 Internet Explorer10 提供了两种浏览体验:用户已熟悉的桌面浏览体验,以及新的 Windows 8 浏览体验。 这两种体验所使用的基础组件(从网络堆栈和缓存到呈现引擎)都是相同的。 两种体验都会发送相同的用户代理 (User-Agent) 头信息,并具有相同的文档对象模型 (DOM)。作为开发人员,请将这两种体验看作一个浏览器 - Internet Explorer 10。 网站
阅读全文
摘要:win7下由于UIPI的限制, 高权限进程无法收到底权限进程发来的消息, 因此对窗口消息hook时无法接收到消息,解决办法是在调用SetWindowsHookEx之前先调用ChangeWindowMessageFilterEx, 该函数修改指定窗口的UIPI消息过滤设置。 原型如下:BOOL WINAPI ChangeWindowMessageFilterEx( HWND hWnd, UINT message, DWORD action, PCHANGEFILTERSTRUCT pChangeFilterStruct);第一个参数要改变设置的窗口句构, 第二个参数要过滤的消息, 第三个参数要执
阅读全文
摘要:在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题;最后点右键以管理员身份运行才可以正常运行。于是想办法让程序在双击启动时默认以管理员身份运行。具体方法:1.首先创建一个名为manifest的文件并将下面的内容粘贴进去;Description of your application2.打开VS2005命令提示按如下格式输入指令即可;mt.exe -manifest -outputresource:第一个尖括号及尖括号内的内容用manifest文件的路径替代,而第二个尖括号及尖括号内的内容用你要操作的exe文件的路径替代;按下Enter键,此时将你的e.
阅读全文
摘要:免费打工仔:一个完善的ActiveX Web控件教程出自Ogre3D开放资源地带跳转到:导航,搜索原作者 David Marcionek.翻译免费打工仔这个教程可以帮助你快速开发一个ActiveX控件。其中将要讲解关于ActiveX开发的一些基础概念,诸如方法(method)、属性(propertiy)和事件(event),以及ActiveX控件和网页之间的通讯方法。下载演示程序 - 231 Kb目录[隐藏]1介绍2创建一个ActiveX控件3加入对GIF动画的支持4增加图形进程条对话框5增加支持代码6为ActiveX控件创建网页7构建一个已签名的ActiveX控件8构建一个安全的Active
阅读全文
摘要:用ATL开发和部署ActiveX网页控件摘 要 ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程。学习使用ActiveX让浏览器访问客户端的硬件资源。关键字 ATL,ActiveX控件,COM组件一、前言在B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等。对于一个完善系统来说,往往很多时候又需要控制这些资源。通过在浏览器中插入ActiveX插件是一种很好的解决方式。在实际的项目开发中,遇到系统登录需要增加物理身份识别。即在系统登录的时候,除了要验证用户名和密码外,还需要验证
阅读全文
摘要:之前在一个B/S项目中遇到一个需求,就是客户需要在页面上对报表的布局以及显示内容,进行自定义。最后决定使用activex技术来实现。众所周知,activex是微软搞得,因此只有ie内核的浏览器才能支持。像firefox(火狐)、Chrome、Apple Safari等非ie内核浏览器都不支持activex控件,这样就大大加大了系统使用的局限性。因此考虑是不是可以让非ie内核浏览器也能支持activex控件,目前火狐等浏览器也有类似于activex控件的技术,那就是插件。所以最终决定以插件来作为连接activex的纽带,使非ie内核浏览器也可以支持activex控件。确定了开发内容后,接下来就是
阅读全文
摘要:症状描述:Accelerator keys, such as ARROW keys, are first received by the message pump of the ActiveX control's container. Even if the control has the focus, it does not receive messages for keystrokes that have special meaning to control containers, such as ARROW and TAB keys. MFC ActiveX controls h
阅读全文