我想添加日志logging到我们的unit testing,logging他们使用的DLL,以及他们从哪里加载。
我可以从Sysinternals ListDLLs获得我需要的信息,但是我需要在testing过程运行的时候运行这个信息,而且我最终会遇到竞争情况:例如,ListDLLs可能运行得太早,而错过了一个DLL通过试运行中途加载; 或ListDLLs可能运行得太晚,在testing过程退出后。
同样,我可以从Visual Studiodebugging器的输出和模块窗口中获取所需的信息,但是我想在构build服务器上自动执行此操作。
有没有任何命令行工具,可以运行任意的EXE,跟踪它使用的DLL,并将信息logging到文件?
您可以编写自己的工具,它将使用“调试”功能。 这个工具必须
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679302(v=vs.85).aspx
好消息是,用Detours自己写出来并不难。 挂钩LoadLibraryA / W函数并将DLL名称记录到一个文件(使用GetmoduleeFileName对实际LoadLibrary返回的值)。 还钩子CreateProcess,以便您可以记录由子进程加载的DLL。
坏消息是:我希望能够发布我使用的源代码,但是这是一个我不能共享的内部工具。
编辑:我不相信这个工具的Detours钩子是完全可靠的,因为在我的测试中,它错过了几个DLL。 这是一个使用调试器API的替代工具: https : //github.com/timrobinson/logdlls
请注意,SysInternals(现在是MSFT: http : //technet.microsoft.com/en-US/sysinternals )有一个很好的工具来跟踪加载您的应用程序时发生的各种事件:进程监视器。 您将不得不筛选出与正在检查的应用程序无关的任何内容。 另外,您可能需要设置Operation =“Load Image”过滤器。
试过Tim Robinson的工具,但它似乎只会跟踪Windows相关的DLL,所以对我来说没用。