Windows打印堆栈

这篇具有很好参考价值的文章主要介绍了Windows打印堆栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

//打印堆栈
#include <stdarg.h>
#include <windows.h>
//#include <dbghelp.h>
#include <stdio.h>

#if _MSC_VER
#define snprintf _snprintf
#endif

#define STACK_INFO_LEN 1024
static int vsnprintf_s(char* buf, size_t len, const char* fmt, va_list arg)
{
	return ::vsnprintf_s(buf, len, _TRUNCATE, fmt, arg);
}

static int vsnprintf_s(wchar_t* buf, size_t len, const wchar_t* fmt, va_list arg)
{
	return ::_vsnwprintf_s(buf, len, _TRUNCATE, fmt, arg);
}

static int snprintf_s(char* buf, size_t len, const char* fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	int nRes = vsnprintf_s(buf, len, fmt, args);
	va_end(args);
	return nRes;
}

void ShowTraceStack(char* szBriefInfo)
{
	static const int MAX_STACK_FRAMES = 12;
	void* pStack[MAX_STACK_FRAMES];
	static char szStackInfo[STACK_INFO_LEN * MAX_STACK_FRAMES];
	static char szFrameInfo[STACK_INFO_LEN];
	HANDLE process = GetCurrentProcess();
	SymInitialize(process, NULL, TRUE);
	WORD frames = CaptureStackBackTrace(0, MAX_STACK_FRAMES, pStack, NULL);
	strcpy(szStackInfo, szBriefInfo == NULL ? "stack traceback:\n" : szBriefInfo);
	strcat(szStackInfo, " ");
	for (WORD i = 0; i < frames; ++i) {
		DWORD64 address = (DWORD64)pStack[i];
		DWORD64 displacementSym = 0;
		char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
		PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
		pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
		pSymbol->MaxNameLen = MAX_SYM_NAME;
		DWORD displacementLine = 0;
		IMAGEHLP_LINE64 line;
		line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
		if (SymFromAddr(process, address, &displacementSym, pSymbol) &&
			SymGetLineFromAddr64(process, address, &displacementLine, &line))
		{
			snprintf_s(szFrameInfo, sizeof(szFrameInfo), "\t%s() at %s:%d(0x%x)\n",
				pSymbol->Name, line.FileName, line.LineNumber, pSymbol->Address);
		}
		else
		{
			snprintf_s(szFrameInfo, sizeof(szFrameInfo), "\terror: %d\n", GetLastError());
		}
		strcat(szStackInfo, szFrameInfo);
	}
	MyLog(L"%s", CString(szStackInfo));//此处是你的日志函数
}

在什么情况下使用打印堆栈函数?

1.一个函数多次调用,调用地方不同,不能下断点,打印日志也看不出什么,打印堆栈可以看出。

2.分析崩溃。

缺点:

1.看不到调用堆栈栈帧变量的值。只能看到调用堆栈函数。文章来源地址https://www.toymoban.com/news/detail-816940.html

到了这里,关于Windows打印堆栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows无法连接到打印机?三个方法连接打印机(Win10系统)

    在日常办公中,我们经常会用到打印机。一般情况下,打印机要与电脑连接才可以使用。有很多用户反馈, windows无法连接到打印机,这是怎么回事呢? 请看文章是如何解决打印机无法连接到计算机的问题! 操作环境: 演示机型:华硕X8AE43In-SL 系统版本:Windows 10 有时遇到:

    2024年02月04日
    浏览(82)
  • 随身wifi改造打印盒子,支持安卓/IOS/Windows

    23年4月发现了随身WIFI的妙处后,一发不可收拾,这玩意带modem,内存512M,flash 4G,带USB口,有WIFI,芯片一般是高通8916,这可是当年手机上用的芯片,跑个Openwrt应该是轻轻松松。 本着能省一点是一点的精神,闲鱼收了一个970的,未刷机,25大洋包邮的 既然也不贵,也懒得备份

    2024年02月15日
    浏览(41)
  • WINDOWS(WIN11)通过IP添加网络打印机

    点击添加设备 点击手动添加 使用IP地址或主机名添加打印机  选择TCP/IP设备,输入打印机地址 如果有正确驱动就安装,没有就取消。  通过手动设置添加本地打印机或网络打印机  选择端口 如果有打印机IP,就“使用现有的端口”;如果没有,就选择“创建新端口”。 根据

    2024年03月21日
    浏览(48)
  • 关于:在 Windows 10/11 中共享文件和打印机

    目录 1、启用相应服务和组件 2、共享文件夹设置 3、共享打印机设置 1)在【设置】中,打开【网络和 Internet】→【以太网】→【更改高级共享设置】:    

    2024年02月05日
    浏览(59)
  • 【windows】连接共享打印机提示:0x0000011B

    【问题现象】 添加共享打印机的时候, 提示错误:0x0000011B。 【解决方法】 按win+r键,在运行输入regedit 然后在注册表中找到路径: 计算机HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrint 打开后,在右侧右键选择新建, 然后选择DWORD(32位),名称为:RpcAuthnLevelPrivacyEnabled 数值数

    2024年02月15日
    浏览(44)
  • Windows11连接共享打印机指定的网络名不再可用

    连接的设备是Windows11连接的Windows10打印机 (附上共享打印机的教程)共享打印机官网教程 网上搜索后,大体的步骤就是检查几个服务是否打开,然后刷新DNS 例如:网上解决方案例子 我的是如上都不好用 之后去 控制面板 程序 启用Windows程序 检查SMB协议也都符合,SMB2/3也都开

    2024年02月12日
    浏览(175)
  • HP打印机一点击打印就出现Windows资源管理器已停止工作问题解决

    本次处理的打印机型号是HP Officejet 200 移动便携式打印机,不过其他型号如果出现类似现象,解决方法应该是一致的。 在弹出Windows资源管理器已停止工作的报错提示框后,点击左下角的详细信息,看到的内容显示是KernelBase.dll崩溃了,如下图: 不过知乎里查了一个帖子的说法

    2024年02月07日
    浏览(263)
  • Windows无法连接到打印机怎么办?快收藏这些正确做法!

    案例:Windows无法连接到打印机怎么办? “朋友们朋友们,最近为了备考国考,我特地买了个打印机回来打印资料,但是我的Windows无法连接到打印机,这是为什么呢?有没有知道Windows应该怎么连接打印机的朋友啊?谢谢!” 平常打印需求大的朋友自己购买一台打印机不仅省

    2024年02月04日
    浏览(70)
  • Win10 电脑无法连接另外一台电脑的共享打印机提示Windows无法连接到打印机,拒绝访问

    Win10 专业版 Epson L1110打印机 电脑A共享自己的打印机 电脑B共享电脑A的打印机 电脑B连接电脑A的共享打印机提示Windows无法连接到打印机,拒绝访问 1.检查电脑A的配置(未解决)

    2024年02月11日
    浏览(77)
  • Windows11 22H2版连接共享打印机出现709错误解决方法

            今天再连接一台共享打印机时遇到了问题,在确定另一台计算机IP地址和打印机驱动都正确无误,且Windows凭据正确另一台电脑可以正常连接访问的情况下,共享打印机连接却始终报错0x00000709,经过网上一番搜索,最终成功解决问题。         微软在Windows11 22H2版

    2024年02月06日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包