定制调试诊断工具和实用程序(1)

2016-02-19 16:40 0 1 收藏

有了下面这个定制调试诊断工具和实用程序(1)教程,不懂定制调试诊断工具和实用程序(1)的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

  本文假设你熟悉 Win32,DLL

  摘要

  在 Windows 系统中,动态库版本冲突实在是一个老大难的问题了,为了解决这个问题,除了使用大量现有的工具外,你还可以利用丰富的 Windows APIs 函数构造自己的调试工具和实用程序。作为例子,本文将提供三个这种类型的工具,讨论如何利用它们来解决动态库的冲突问题。这三个工具分别是:

DllSpy列出加载到系统中的所有 Dlls 以及所有使用这些 Dlls 的进程; ProcessSpy列出系统中所有正在运行的进程以及它们正在使用的 Dlls; ProcessXP显示 Windows XP 所有并发运行的会话(Sessions)清单;

  从所周知,动态库地狱(DLL Hell)已经不是什么新鲜玩意儿了,如果你使用第三方的 Dlls,肯定会碰到不少与它有关的问题,如找不到入口点,或者库版本不兼容等。.NET 中允许组件的并行执行,减少了产生这种问题的几率,但是如果你还没有升级到 .NET 环境,那怎么办?针对这种情况,可用的方法是用不同的工具跟踪 DLL 的依赖性。但是用标准工具跟踪时,你可能最后得不到所要的信息。许多工具都没有你需要的功能,比如自动写日志文件,跟踪分析,仅在控制台操作脚本控制等。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  本文我们先用一些现有的工具来考察系统中的运行进程,然后系统地研究本文提供的三个工具:DllSpy, ProcessSpy 和 ProcessXP,以便在今后的开发或调试中使用这些工具和技术。

  现有的工具

  Depends.exe 是 Visual C++ 自带的一个工具。它可能是我们经常使用的工具中最简单的一个工具了,其功能是列出某个应用程序或 DLL 需要的 DLLs。这个程序在本站可以下载(更新版本请到下面这个地址下载:http://www.dependencywalker.com)。如果你需要看某个 DLL 或可执行文件的全路经,可以用它的上下文菜单进行设置:如图一:

  图一 察看全路经

  对于静态加载的情况(即应用程序在链接过程中将 dlls 对应的 lib 文件链接到程序中),这个工具非常好用,但对于版本较新的系统,大多使用 COM 编程接口,或者说是用 COM 对象编程模型,而 COM 对象的实例化都是运行时加载或者说动态加载某个 DLL 文件,然后通过 LoadLibrary 和 GetProcAddress 调用其中某个特殊的函数来实现的。你不知道这个 DLL 是何时、从哪里被加载的。

  一种确定 DLLs 被动态加载的方法是找出需要被每一个进程加载的 DLL。Sysinternal 公司(http://www.sysinternals.com)提供了一个工具软件 ListDlls.exe。它是一个控制台程序,其图形用户界面(GUI)版本为 Process Explorer。如图二:

  图二 Process Explorer 运行画面

  除了列出被某个进程使用的 DLLs 之外,还可以用这个工具了解某个程序用到了哪个 kernel 对象,从版本3.11之后,Process Explorer 还可以让你在两个快照之间轻松扫描到新的或未使用的对象。

  有时候在你用 Process Explorer 扫描到某个进程之前,它可能已经被加载然后又在很短的时间内被卸载了。碰到这种情况时,你需要另外一种类型的工具,我们将在后文中讨论。

  为了操纵进程和 DLLs,首先你必须知道每一个被加载的 DLL 被哪些进程使用。本文的例子程序 DllSpy 实现目的即在于此。如图三所示:

  图三 DllSpy 运行画面

  DllSpy程序上面的窗格列出的是所有已经加载的 DLL,每选中一个DLL,在下面的窗格中就会列出使用该 DLL 的所有进程。

  而 ProcessSpy 例子程序的功能正好与 DllSpy 相反,它在上面窗格列出系统中所有的运行进程,每选中一个进程,在下面窗格便显示出此进程使用的所有 DLLs,如图四所示:

  图四 ProcessSpy 运行画面

  下面窗格还反映了 DLL 加载的地址是实际地址还是首选地址,以及它们的从属性是静态的还是动态的。这些工具的源代码和可执行程序都可以从本文的下载链接中下载,它们也许不完全满足你的需要,但可以作为技术参考,对编程工作肯定是有所裨益的。

  参考资料

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)如何用 Win32 APIs 枚举应用程序窗口和进程 如何在 Windows NT、Windows 2000 和 Windows XP 中使用VDMDBG函数? 如何从程序中调用外壳的文件属性对话框? Windows NT 系统中如何启动和终止 16 位 Windows 应用程序?

  下回我们将讨论如何获取 Win32 系统中运行的进程信息。

  (待续)

本文示例代码或素材下载

来源:https://www.tulaoshi.com/n/20160219/1612713.html

延伸阅读
标签: Web开发
JavaScript代码看起来总是要比Java、C#乱的多,可能是自己还不熟悉JavaScript编程,因此一款优秀的JavaScript调试器就显得格外重要。目前在网络和书上见到最多的有: 第一个:Microsoft Script Debugger: 集成在IE中的一款很原始的调试工具,具备基本的调试功能,除了可以用于调试客户端脚本,还能调试在Microsoft IIS上运行的服务器端脚本。...
标签: Painter
Painter 界面定制      painter是世界上最好的仿自然绘画软件,如果你对于painter还不甚了解,那么以下的内容图解会帮助你初步了解painter的操作界面以及一些关于个性化的小技巧。 这TuLaoShi.com个是painter 6的操作界面,其中我没有把color set的面板显示出来,因为那块东西基本没用…… 图片如下: (图片较大...
标签: PHP
本文介绍调试 PHP 应用程序的各种方法,包括在 Apache and PHP中打开错误报告,以及通过在一个简单的PHP脚本中放置策略性的print语句,找到更困难的bug的源头。还会介绍用于Eclipse的PHPEclipse插件,这是一个灵活的开发环境,具有实时语法解析能力,还会介绍PHPEclipse的DBG调试器扩展。   简介 有许多 PHP 调试技...
标签: FLASH flash教程
第3节、制作练习场景 效果如图1 所示 制作过程: 1.新增一个名为 typeSpaceMovie 的电影剪辑 2.在 typeSpaceMwww.tulaoshi.comovie 新增一图层,添加两个文字区域 /:text1 和 /:text2 . 并设置他们的大小, 和字体,字符大小完全一样。 在变量名前加 /: 表示这是告诉这个变量在主 TimeLine 中也是可用的,而不仅仅是typeSpac...
标签: Web开发
面对一大段的javascript脚本,以前总是会很头疼,找不到调试他的方法,如果出现什么错误,总是要从头分析,然后插入很多Alert();调试起来很麻烦。      实际上Visual Studio 对JavaScript 脚本是可以设置断点进行调试的。只是有很多象我这样的新手不会用而已。      只需要打开IE—工具—Intern...

经验教程

889

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部