经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具。

 

(1) Spy++

相信windows开发中应该没人不知道这个工具, 我们常用这个工具查看窗口层次,跟踪窗口消息。

(2) WinSpy
一个窗口相关的小工具,非常有用,可以帮我们快速查看和修改窗口属性。(这个工具是开源的, 拿来学习挺不错的)

 
(3) Process Explorer
非常有用的工具,类似任务管理器,但是比任务管理器强大的多。 可以让我们查看查看每个进程的详细信息以及进程之间的关系,理解了这个工具你也就理解了整个程序进程.

 
(4) Process Monitor
看名字就知道是用来监视进程活动的,可以监视目标进程的注册表读写,文件读写, 模块加载和进程线程活动情况等,很多时候我们拿它来观察目标进程的活动情况。

 
(5) VMMap
完整的内存查看工具,可以用它来分析整个程序内存的详细情况(包括某个堆里面的每个分配的内存块),理解了这个工具你也就理解了整个程序内存布局。

 
这个工具也是我强烈推荐的,可以用它来跟踪目标进程的API调用情况,当你怀疑目标程序的某个Feature调用了某几个API,但又没有证据时,可以通过这个工具来验证。该工具甚至还包含一些简单的调试功能,可以通过设置断点在程序调用API时修改参数和返回值。

 
(6) WinDbg
不多说了,Windows平台上最强大的调试器,上面很多工具的功能都可以通过它来实现,比如VMMap的功能可以通过WinDbg的!address和!heap命令来实现,比如API Monitor的功能可以通过WinDbg的条件断点来实现。
 
(7) wireshark
网络开发和理解网络协议的必备工具, 通过这个工具我们可以看到整个网络协议栈在每层上数据包的结构, 很多时候我们拿它来分析目标程序的网络协议和实现方式。

 
(8) httpwatch
集成到浏览器的, http协议的分析利器,  强大的网页数据分析工具, 基本上是Http编程的必备工具。

(9) IDA
反汇编的利器,可以反汇编出函数的流程图以及相互调用关系, 很多时候用它来静态分析程序结构, 然后结合WinDbg进行动态调试。

(10) WindowMonitor
这个程序是个人工作的一个辅助工具,因为现在工作是做远程桌面共享相关,经常要和窗口打交道,通过这个工具可以监视窗口的行为:
比如焦点的改变,窗口的创建和销毁,窗口的显示和隐藏, 以及窗口的枚举等,现在功能还很简单,需要时再扩充,可以到 这下 下载。

 
最后总结下,工欲善其事,必先利其器,借助工具可以帮我们更好的理解计算机程序。 另外这些工具使用时也不是完全独立的,很多时候是组合使用, 比如我们先通过Spy++查看窗口的消息处理函数地址,然后通过WinDbg的条件断点让程序收到某个消息时进行拦截和调试。

http://www.cppblog.com/weiym/archive/2014/09/09/208258.html

Windows开发中一些常用的辅助工具的更多相关文章

  1. web开发中的 emmet 效率提升工具

    web开发中的 emmet 效率提升工具 可以用来快速生成html 代码. 并且给各种IDE.编辑器提供了插件支持,sublime ,webstorm等. 如在webstorm中安装好emmet之后, ...

  2. 实际开发中,实用的辅助iOS开发的工具

    就目前所知,开发iOS绝大部分都是用Xcode,除此工具之外,还有几个好用的可以辅助实际开发中遇到的问题,拥有这种辅助开发技能,在工作中,甚至是以后的面试中,都可能会有不小的帮助. 下面推荐三个实用的 ...

  3. 音频软件开发中的debug方法和工具

    本文系作者原创.如转载,请注明出处. 谢谢! 音频软件开发同其他软件开发一样,都需要去调试.音频软件调试同其他软件调试方法有相同的地方,也有不同的地方,同时调试时还需要借助一些专门的工具,有了这些方法 ...

  4. 项目开发中git常用命令、git工作流、git分支模型

    #新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...

  5. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  6. JS 开发中数组常用的方法

    大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...

  7. 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

    自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...

  8. UI开发中的Unit test新工具:网页抓屏比较

    在UI开发中,判断是否正常往往需要看到UI长的模样,所以一般的Unit test无法胜任. 现在有一款通过抓屏而后相素比较的方法,或许对于UI自动化测试能够起到比较好的改进效果. 具体请参见:http ...

  9. git开发流程、常用命令及工具、TortoiseGit使用及常见问题

    根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 - 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上br ...

随机推荐

  1. SWOT分析法

    SWOT(Strengths Weakness Opportunity Threats)分析法,又称为态势分析法或优劣势分析法,用来确定企业自身的竞争优势(strength).竞争劣势(weaknes ...

  2. JS 实现显示和隐藏div(以百度地图为例)

    主要参考的文章:https://my.oschina.net/xsh1208/blog/215811,https://zhidao.baidu.com/question/568774688.html ...

  3. AutoCompleteTextView ArrayAdapter

    AutoCompleteTextView   继承于EditText,拥有EditText所有属性和方法 在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息 首先在activity_mai ...

  4. 理解 B*tree index内部结构

    转载请注明出处:http://write.blog.csdn.net/postedit/40589651 Oracle数据库里的B树索引就好象一棵倒长的树.它包括两种类型的数据块:一种是索引分支块,还 ...

  5. C语言判断文件是否存在

      用函数access,头文件是io.h,原型:    int   access(const   char   *filename,   int   amode); amode参数为0时表示检查文件的 ...

  6. WIN32读写INI文件方法

      在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...

  7. TCP总结

      TCP协议   <计算机网络>谢希仁 及笔记 TCP 的那些事儿(上):http://coolshell.cn/articles/11564.html TCP 的那些事儿(下):htt ...

  8. 二叉排序树BST代码(JAVA)

        publicclassTest{     publicstaticvoid main(String[] args){         int[] r =newint[]{5,1,3,4,6,7 ...

  9. Android进程机制

    以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...

  10. [CSAPP笔记][第九章虚拟存储器][吐血1500行]

    9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM). 虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互. 为每个进程提供一个 ...