65.9K
CodeProject 正在变化。 阅读更多。
Home

zTrace 3(仅限 64 位)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (12投票s)

2017 年 4 月 20 日

CPOL

4分钟阅读

viewsIcon

17941

downloadIcon

292

调试实用程序

引言

这是之前在此处发布的项目的重构版本
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...

 
© . All rights reserved.