是否可以在不指定类型的情况下将变量值打印到调试?

Posted

技术标签:

【中文标题】是否可以在不指定类型的情况下将变量值打印到调试?【英文标题】:Is possible to print variables values to Debug without specifying their types? 【发布时间】:2021-09-10 07:48:27 【问题描述】:

我正在将变量的值打印到DebugView。

除了手动指定%VarTYPE之外,还有任何“更简单”的方式来打印它们的值

目前这样做:

WCHAR wsText[255] = L"";
wsprintf(wsText, L"dwExStyle: %??? lpClassName: %??? lpWindowName: %??? ...", dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, ...);
return CreateWindowExA(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);

不一定非得是wsprintf,无需手动指定每个参数类型就能打印出来会有帮助!

【问题讨论】:

fmt 库或 C++20 std::format 您可以使用wstringstream<< 来构造您的字符串。 @RetiredNinja 类似std::wstringstream Text; Text << L"dwExStyle:" << dwExStyle; OutputDebugString(Text);? OutputDebugString(Text.str().c_str()); 如果您连接了调试器,您可以转储值而无需编写任何代码。该功能在 Visual Studio 中称为 “跟踪点” 【参考方案1】:

是的,使用字符串流,它们也比 wsprintf 更安全(缓冲区溢出)。对于未知类型,您可以重载运算符

#include <Windows.h>
#include <string>
#include <sstream>

int main()

    DWORD dwExStyle 0 ;
    std::wstringstream wss;
    wss << L"dwExtStyle : " << dwExStyle << ", lpClassName: "; // and more....
    OutputDebugString(wss.str().c_str());


std::ostream& operator<<(std::ostream& os, const your_type& value)

    os << value.member; // or something
    return os;

【讨论】:

以上是关于是否可以在不指定类型的情况下将变量值打印到调试?的主要内容,如果未能解决你的问题,请参考以下文章

将变量值从反应构造函数传递到 nodeJS 后端

excel中怎样用宏将变量值写到指定单元格中

Datalab 到 BigQuery - 将变量值插入 SQL

将变量值添加到 mysql 列

将变量值从 JS 传递给 PHP

单击表格单元格时将变量值发送到下一个视图控制器