工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 移动开发 > 正文
Windows CE进程查看程序DIY
[文章信息]
作者:付林林
时间:2004-09-15
出处:天极网
责任编辑:方舟
[文章导读]
开发Windows CE下运行的软件没有必要时刻让开发平台和实际平台连接
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]
  在我以前所著文章《模拟器和远程调试工具(二)》中讲述了PB自带的远程调试工具“Remote Process Viewer”。利用这个工具可以在开发平台上查看实际平台上正运行的进程的一些信息,这些信息包括进程ID、句柄、基地址、包含的线程数量、以及每个线程的信息(如线程ID、线程优先级、访问键),另外还有整个进程加载的每个DLL的信息(DLL文件名、ID、使用计数、基地址、大小、路径等)。这个调试工具对于用模拟器调试程序,或者用串口、网卡连接实际平台调试程序来说非常有效。但是在有些情况下这个调试工具又显露出它的缺点。



  开发Windows CE下运行的软件没有必要时刻让开发平台和实际平台连接,毕竟不是所有程序、所有功能都需要单步跟踪或者实时查看内存变量状态。而要使用“Remote Process Viewer”,就必须先将开发平台同实际平台连接起来,有时不但没必要,反而浪费时间。为此,我特意编写了一个类似“Remote Process Viewer”的调试工具,只不过把它的“Remote”去掉了。这个工具名为“CEInfo”,在VCKBASE网站上可以找到,另外在VCKBASE出版的《VC知识库5周年精华珍藏版光盘》上也可以找到。因为我这里只有National x86 CPU,所以此软件是基于x86指令集编译的。可以运行在所有支持x86指令集的CPU上,包括PB的模拟器。下面图1是这个工具的主界面。


图1 CEInfo主界面

  本篇文章主要讲述进程查看程序利用的主要API——Toolhelp。Toolhelp API位于Toolhelp.DLL中。包含13个函数和5个结构体。利用这些函数你可以编写既适合自己需要,又适合自己实际平台的调试工具。具体函数声明如下表:

函数 功能
CreateToolhelp32Snapshot 创建系统快照,在参数2中指定快照的对象,对象包括进程、线程、DLL、堆。因为系统内这些对象的生存期可能非常短,所以形成快照后的数据不一定完全反映真实情况。函数返回快照的句柄。
CloseToolhelp32Snapshot 关闭快照对象。参数为句柄。
Heap32First 函数获得指定进程中指定堆内部的第一个块的信息。信息包括块的首地址、块大小、块标志等。
Heap32Next 与上一个函数结合使用,获得下一个块的信息。
Heap32ListFirst 函数获得指定进程中第一个堆的信息。
Heap32ListNext 与上一个函数结合使用,获得下一个堆的信息。
Module32First 函数获得指定进程中第一个模块(DLL)的信息。信息包括模块的ID、引用计数、首地址、大小、路径等。
Module32Next 与上一个函数结合使用,获得下一个模块的信息。
Process32First 函数获得当前系统快照对象中第一个进程信息。
Process32Next 与上一个函数结合使用,获得下一个进程的信息。
Thread32First 函数获得指定进程中第一个线程的信息。信息包括线程ID、优先级、创建此线程的ID、访问键。
Thread32Next 与上一个函数结合使用,获得下一个线程的信息。
Toolhelp32ReadProcessMemory 函数获得指定进程中指定内存区域的数据。

  注:要了解进程、线程、堆,请参见我的文章《Windows CE进程、线程、内存管理》。

  利用这些函数即可编写一个获得当前系统进程、线程、DLL、堆的信息。编写这样的程序应该不难。所以我没必要讲的更加详细。但是有几点需要注意,也是CE帮助文档中重点强调的。

  CreateToolhelp32Snapshot函数将当前系统的进程、线程、DLL、堆的信息全部复制到一个缓冲区里。所以在执行此函数后再调用其它Toolhelp函数,所得到的信息未必是准确的。比如得到的线程句柄在使用时异常,得到模块地址时模块已经释放。

  根据上面所说,我们得到的信息未必是准确的,那么就应该在代码中加入异常处理。(我编写的“CEInfo”就没有加入异常处理,因为我只查看系统信息)

  关闭快照对象只能用CloseToolhelp32Snapshot,不能用CloseHandle。



发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • WinCE下申请大容量物理内存
  • 在Windows CE下实现拨号上网
  • DirectShow视频捕捉应用研究
  • WinCE 进程、线程和内存管理之同步
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索