‘Debug’ 分类的存档

[转载]程序崩溃后如何更好的反馈信息 – 2012 – 博客园. 我们使用Windows都知道,整个Windows和微软提供的应用软件的稳定性和崩溃后的体验是逐步提升的。在大牛的作品《软件调试》 中有描述。 在Windows下,软件出错,常见的报告手段: 1、事件日志:这里记录了很多关键的错误信息 2、崩溃报告:可以自动提交错误的信息,或者手动提交,以不断的改进软件和方便排错 3、专用的日志工具:如Netmon,sysinternal等   那我们的软件在崩溃后如何处理呢?主要目的: 1、方便我们的排错 2、提供更好的使用体验 最近在设计一个应用系统时对这个问题进行处理。 这方面有比较多的参考: 首先在stackoverflow上可以看到,c++ release  program crashes report http://stackoverflow.com/questions/112831/how-to-get-a-stack-trace-when-c-program-crashes-using-msvc8-2005 以上有比较多的框架和工具 Windows应用程序处理的一个框架和详细参考资料 Integrating Crash Reporting into Your Application – A Beginners Tutorial http://www.codeproject.com/Articles/308634/Integrating-Crash-Reporting-into-Your-Application http://code.google.com/p/crashrpt/ http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Minidu Google breakPad Google breakpad是 一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移 植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一,而Google breakpad就帮我们做到了这一点,不管是哪个平台下的崩溃,都能够进行统一的分析。现在很多工程都在使用他:最著名的几个如 Chrome,Firefox,Picasa和Google Earth。另外他的License是BSD的,也就是说,我们即便是在商业软件中使用,也是合法的 http://code.google.com/p/google-breakpad/ http://bigasp.com/archives/450   调试Release发布版程序的Crash错误 http://www.cppblog.com/Walker/articles/146153.html http://blog.sina.com.cn/s/blog_48f93b530100fsln.html   对于托管程序也有 Good crash [...]

2012年5月18日13:44 没有评论

[转载]再谈IE的浏览器模式和文档模式 – BobLiu – 博客园. 以前在 “IE8兼容视图(IE7 mode)与独立IE7的区别”一文中曾经涉及过浏览器模式和文档模式,但二者的区别却不甚了了,现在有了新的认识,再补充一下。 1.浏览器模式与文档模式概念 在较新的IE浏览器中(如IE8, IE9, IE10),为了解决兼容性的问题,引入了浏览器模式和文档模式两个概念,浏览网页时可以通过按F12键看到这两种模式。   浏览器模式的主要作用是为兼容较早版本的IE,它会控制浏览器发出的UserAgent,表示以哪个版本的浏览器发出请求,以此来允许为某个特定IE版本设计的代码正确执行(举例来说:有些代码真是判断ie版本的,还有css里也有判断ie版本的)。   文档模式的主要作用是影响浏览器显示网页HTML的方式,在接到返回的HTML文件后,决定以哪个IE版本的文档模式解析该页面(举例来说:JS脚本就是依赖文档模式,IE9的js变化就需要IE9文档模式来支持)。 2.如何使WebBrowser运行在IE9浏览器模式下 在安装了IE9的计算机上,Webbrowser并不是直接运行在IE9模式下,而是默认工作在IE9兼容视图(也就是IE7 Mode)下,为了让Webbrowser工作在IE9下,需要修改注册表,为应用程序指明使用IE9版本。 32位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION,增加YourApplication.exe,值为十进制9999。 64位计算机需要修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION,增加YourApplication.exe,值为十进制9999。 注意:9999最正确,9000则不推荐用,因为它不彻底。 3.如何使Htm页面使用IE9文档模式 如果不修改交易页面,系统将不会使用IE9文档模式来解析交易页面,而是仍沿用之前兼容旧版IE的 Quirks模来渲染,解释交易页面,JS脚本也将同样处置。这样的缺点是无法使用Html5新特性,优点是您的系统升级到IE9的兼容性改造工作将会大为减少。 修改Htm页面的方法之一是,在Head->Title下添加<META http-equiv=”X-UA-Compatible” content=”IE=9″ > </META>,这样可确保HTM页面工作在IE9标准文档模式下。 注意:msdn上写的关于9999可以无视doctype而自动使页面运行在ie9文档模式的说法是错误的,这一点已经得到了权威的认可。 4.总结 欲使你的系统作为整体(包括WebBrowser和Htm页面)工作在IE9下,则以上2, 3两步均需遵守,缺一不可。

2012年4月28日08:39 评论关闭

[转载].Net 开发者必备的11款开发利器_IT新闻_博客园. 现如今,技术发展十分迅猛,开发者只有通过不断的学习才能跟得上步伐。而为了便于学习和工作,涌现了很多优秀的开发工具用以帮助开发者提高工作 效率。同时,这些工具大都开源而且免费,性能也十分优异。以下就是为 .NET 开发者准备的 11 款开发利器,希望它们能让你的网站开发之路变得简单易行。 1、Webmatrix WebMatrix 是微软最新的 Web 开发工具,它包含了构建网站所需要的一切元素。你可以从开源 Web 项目或者内置的 Web 模板开始,也可以直接从无到有编写代码。简单并且完全是免费的。开发网站从来没有如此简单。   2、Visual Studio 2010 Express Visual Studio 2010 Express 是一套免费、入门级的产品。它的用户界面十分精简,同时拥有 Visual Studio 的核心功能,常用于为某一平台开发应用。   3、Notepad ++  Notepad++ 是一款 Windows 环境下免费开源的代码编辑器,支持多种编程语言,不仅有语法高亮度显示,也有语法折叠等功能。   4、JustDecompile JustDecompile 是一款新的、免费的 .NET 反编译软件。Telerik 公司根据多年的代码分析经验开发了这一反编译利器。它能让你毫不费力地分析编译好的 .NET 程序,同时只需点击一下按钮就可以进行反编译。   5、Fiddler Fiddler 是一款 Web 调试代理软件。它能够记录所有客户端和服务器间的 HTTP 请求,允许你监视、设置断点、甚至修改输入输出数据。Fiddler 包含了一个强大的基于事件脚本的子系统,并且能够使用 .NET 框架语言扩展。   6、FileZilla FileZilla [...]

2012年4月25日16:20 评论关闭

[转载]代码的坏味道 – david++ – 博客园. 代码坏味道:是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。 1. 重复的代码 如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。 同一个class内的两个函数中含有重复的代码段 两个兄弟class的成员函数中含有重复的代码段 两个毫不相关的class内出现重复的代码段 注意:重复的代码是多数潜在BUG的温床! 2. 过长的函数 拥有短函数的对象会活的比较好、比较长。 程序愈长就愈难理解 函数过长阅读起来也不方便 小函数的价值:解释能力、共享能力、选择能力 原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立的函数中。记着,起个好名字! 3.  过大类 如果想利用单一类做太多事情,其内往往就会出现太多的成员变量。 提取完成同一任务的相关变量到一个新的类 干太多事情的类,可以考虑把责任委托给其他类 注意:一个类如果拥有太多的代码,也是代码重复、混乱、死亡的绝佳滋生地点。 4.  过长的参数列表 太长的参数列表难以理解,太多参数会造成前后不一致、不易使用,而且你需要更多数据时,就不得不修改它。 原则:参数不超过3个! 5. 发散式变化 我们希望软件能够更容易被修改。一旦需要修改,我们希望能够跳到系统的某一点,只在该处做修改。如果不能做到这点,你就嗅出“坏味道:发散式变化”或“坏味道:霰弹式修改”。 发散式变化:一个类受多种变化的影响 数据库新加一个字段,同时修改三个函数:Load、Insert、Update 新加一个角色二进制,同时修改四处 … 原则:针对某一外界变化的所有相应修改,都只应该发生在单一类中 6. 霰弹式修改 如果每遇到某种变化,你都必须在许多不同的类内做出许多小修改以响应之。如果需要修改的代码散布四处,你不但难以找到它们,也很容易忘记某个重要的修改。 霰弹式修改:一种变化引起多个类相应的修改 7. 依恋情节 函数对某个类的兴趣高过对自己所处类的兴趣,就会产生对这个类的依恋情节,造成紧耦合。 原则:判断哪个类拥有最多被此函数使用的数据,然后将这个函数和那些数据摆在一起。 原则:将总是变化的东西放在一块。 8. 数据泥团 有些数据项,喜欢成群结队地待在一块。那就把它们绑起来放在一个新的类里面。这样就可以: 缩短参数列表 简化函数调用 9. 基本型别偏执 代码中有很多基本数据类型的数据。 原则:如果看到一些基本类型数据,尝试定义一种新的数据类型,符合它当前所代表的对象类型。 10. switch惊悚现身 面向对象程序的一个最明显特征就是:少用switch语句。从本质上说,switch语句的问题在于重复。 原则:看到switch你就应该考虑使用多态来替换它。 11. 冗赘类 你所创建的每一个类,都得有人去理解它、维护它,但一个类没有存在的必要时候,就让这个类庄严扑义吧! 原则:如果一个类的所得不值其身价,它就应该消失。 [...]

2012年4月24日10:03 评论关闭

[转载]开发所用到工具和方法 – rolends1986 – 博客园. 开发所用到工具和方法 关于windows窗体 简介:大家都知道基于windows系统的交互都基于窗体(window)的,所以window是交互界面,或者交互入口,在windows中基础编程中句柄表示各种类,对象,资源的实例,那么窗体也是有句柄的,窗体的中的控件一定有句柄?(答案下面揭晓) 窗体的分析方式 Spy++:Spy++是一个基于 Win32(最新版本支持Win64) 的实用工具,它提供系统的进程、线程、窗口和窗口消息的图形视图(百度抄的),这个工具是微软自家,微软自家的没什么说的,功能很强大,它可以分析窗体句柄,捕获消息,查看线程等功能, 使用方法: 分解示例 通过上述示例我们可以得到winrar界面的窗体(句柄)结构,以及属性信息,通过这些属性信息就可以在筛选出我们需要的窗体了 inspect32:inspect32也是一个窗体信息查看的,它和spy不同的是它可以查看菜单 关于无句柄窗体(DUI) 最近这个几年发展起来的技术,大家可以百度”无句柄窗体”,这种窗体的好处很多,我比较喜欢的性能好,保密性好这个两方面的 DUI窗体没有子控件句柄,要想获取信息就必须实现屏幕取词,HOOK ExtTextOut,TextOut,DrawText等字符绘制函数,获取相应的位置的字符串,然后筛选获取相应的信息 按钮点击的实现 通过窗体消息 SendMessage(hWnd,WM_LBUTTONDOWN, 0×0000001, lprama);按下鼠标左键 SendMessage (hWnd,WM_LBUTTONUP, 0×0000000, lprama);放开鼠标左键 其中lprama为位置参数,构造方法 int lprama = ((y << 16) | (x & 0xffff)); 移动鼠标,发送点击事件 WinAPIHelper.SetCursorPos(x, y); 设置鼠标位置 WinAPIHelper.mouse_event(WinAPIHelper.MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);按下鼠标左键 WinAPIHelper.mouse_event(WinAPIHelper.MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero); 放开鼠标左键 [...]

2012年4月19日14:56 评论关闭
备案信息:冀ICP备10007948号