是否可以在不指定类型的情况下将变量值打印到调试?
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;
【讨论】:
以上是关于是否可以在不指定类型的情况下将变量值打印到调试?的主要内容,如果未能解决你的问题,请参考以下文章