zTrace 3(仅限 64 位)






4.81/5 (12投票s)
调试实用程序
引言
这是之前在此处发布的项目的重构版本
https://codeproject.org.cn/Articles/693260/zTrace-debugging-utility
(请继续使用此之前的 32 位应用程序版本)
这个新版本仅用于链接调试 UNICODE 64 位应用程序。
这是一个Visual Studio 2017 community项目,经过高度优化,将 zTrace.dll 的大小从91减少到14 Kb。
(它基于与用于生成极小的 MBox64 OpenGL visual plugins. 相同技术)
背景
该实用程序的目的是将调试信息显示在弹出窗口工具和/或文本文件中,使用一个独立的线程与您想要调试的当前应用程序并行工作。
zTrace 在开发时非常有用,可以检查程序是否正常运行。
它的模型是 WinDev 的 Trace API,原始的 Win32 版本是用 PowerBASIC 编写的。
我最初编写 zTrace 来调试我的附加图形 DLL 工具,但它对任何 32 位或 64 位 EXE 也非常有效。当我决定将 WinLIFT 和 GDImage 转换为 C++ 时,它是我列表中的第一项,因为没有它我无法继续开发。
zTrace 仅使用核心的扁平 API SDK 过程式风格,这是我使用的不同语言所理解的唯一共同点,也是摆脱额外依赖的唯一方法。
此版本仅支持 UNICODE,有一个用 PowerBASIC 编写的 ANSI 版本,但仅支持 32 位。
使用代码
只有一个 API 可以这样调用
zTrace(L"Wide String Information")
传递一个单独的 unicode (WCHAR) 字符串,其中包含要在跟踪窗口中显示的信息。
辅助函数,用于显式链接
#define long_proc typedef long (__stdcall *zProc) long zTrace(IN WCHAR* sPtr) { long nRet = 0; static HMODULE hDll; if (hDll == 0) { if (sizeof(LONG_PTR) == 8) { hDll = LoadLibrary(L"zTrace64");; } else { hDll = LoadLibrary(L"zTrace32"); } } if (hDll) { long_proc(WCHAR*); static zProc hProc; if (hProc == 0) { hProc = (zProc)GetProcAddress(hDll, "zTrace"); } if (hProc) { nRet = hProc(sPtr); } } return nRet; }
洞察
跟踪窗口
• 作为参数传递的信息将显示在 zTrace 窗口的下一行。
• 当调用 zTrace 时,跟踪窗口会自动打开,默认情况下,该窗口位于屏幕的左上角。
• 当您关闭被调试的应用程序时,zTrace 窗口会自动关闭。
zDebug.txt 报告
• 工作方式与 zTrace 窗口完全相同,只是信息被写入文本文件。
• 调用 zDebug 时会自动创建报告,报告保存在被调试应用程序的同一文件夹中。
• zDebug 可以单独使用,也可以与 zTrace 结合使用(在弹出菜单中选中该选项时)。
• 当被调试的应用程序意外关闭或应用程序的生命周期很短,不足以让您阅读 zTrace 窗口中的内容时,zDebug 非常方便。
• 每次启动新的 zDebug 会话时,都会创建一个新的 zDebug.txt 文件。
上下文弹出菜单(在跟踪窗口上单击鼠标右键)
• "使用水平滚动条",显示或隐藏水平滚动条。
• "发送选定内容到打印机",打印选定的行(或在未选择时打印整个列表)。
• "将选定内容复制到剪贴板",将选定的行(或在未选择时复制整个列表)复制到剪贴板。
• "清除内容",清除跟踪窗口的内容。
• "跟踪窗口置顶",在所有其他窗口(包括其他应用程序的窗口)之上显示跟踪窗口。
• "创建 zDebug.txt 报告",zDebug.txt 报告将创建在被调试应用程序的文件夹中。
• "保存窗口坐标",为下一个会话存储 zTrace 窗口的大小和位置。
屏幕截图
编译器设置
为了大幅减小 zTrace.dll 的大小,您必须使用提供的 TCLib.lib 并按如下方式设置属性页
包含 + 编译指示
#include <windows.h> #include "..\TCLib\Strings.cpp" #pragma warning(disable: 4996) // remove Unsafe notifications #pragma warning(disable: 4312) // remove warning C4312: 'type cast': conversion from 'long' to 'HMENU' of greater size</font></code>
关于
您可以在我的私人论坛上了解更多关于我的工作,并下载几个 C++ 演示项目
www.objreader.com
更新
04-26-2017
ZIP 文件已更新
修复
delete [] SelItem;
在 case IDM_Print 中意外丢失
增强功能
新菜单选项:“在 zDebug.txt 中使用 Unicode”
用于在 ANSI 或 UNICODE 之间切换
对于 ANSI,现在使用 UTF-8 BOM 标头。
UTF-8 BOM 是一系列字节 (EF BB BF),它允许读取器将文件标识为 UTF-8 编码。
感谢 Andrey Unis 向我报告了这些。
04-27-2017
我已将 Andrei 的更改合并到一个新版本中,其中包含
进一步的代码清理,
为列表框窗口和打印机设置了新的字体,
切换回 XP 兼容性,
不再需要 TCLib 链接,它已被移除。
通过更多的功能和进一步的代码优化,我们能够将 64 位 Unicode DLL 的大小保持在仅 11 Kb...