最新要闻
- 水溶性笔是什么意思?水溶性笔和油性笔的区别是什么?
- 白炽灯色温是多少?白炽灯色温4000-4600K是多少度?
- 八字有多少种排列组合?八字有食神代表什么?
- 荷月是几月的别称?十二个月的别称和雅称
- 酒店的英语怎么说?酒店前台的工作内容是什么?
- 当前快播:河北用上了无人驾驶农机:北斗加持 坐在屋里就把地给种了
- 今日要闻!奔驰、宝马、特斯拉相继取消收音机!广播公司担忧:有隐患
- 换机周期将创历史新高:长达43个月 你多久换一次?
- 波音、空客狂喜 印度将签史诗级飞机订单:一次买下500架
- 天天实时:创建全国首个ICU!我国重症医学奠基人陈德昌离世 享年90岁
- 【世界新要闻】2799元配酷睿i5!小米迷你主机将开启众筹 便宜900元条件公布
- 环球热门:小米13黑色版图赏:直屏直边手感秒杀iPhone 14!
- 真爱粉!有米粉花近万元抢了两台小米13
- 世界快资讯:好评率超99% 小米MIX Fold 2推出月光银配色 雷军:镜面效果令人惊叹
- 天天热点评!比RTX 4090便宜5000 AMD RX 7900系列显卡年底供货20万块:备货充足
- 小米13系列供不应求!线上已售罄 3999元起
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球观热点:sentry 在加载模块时闪退
这是一个很久之前的问题了,今天记录一下,以便遇到同样问题的同学能够看到此文章
崩溃环境:
目前仅收到 windows 7 的部分用户反馈,在程序启动时发生闪退
(资料图片)
问题分析:
查看用户提供的日志,可以看见崩溃发生在 sentry 内部
堆栈显示,在加载 sentry_get_modules_list 时程序出现闪退,已知sentry_get_modules_list 是 sentry 源码里可找到的函数
p.s.sentry_capture_event 是 sentry 内部上传日志所调用的函数,sentry_unwind_stack_from_ucontext 没有在源码中找到,所以姑且跳过这个函数
我们猜测是 sentry 在加载模块时出错了,于是我们便尝试将加载模块的部分代码先注释,再看会不会闪退
sentry_value_tsentry_get_modules_list(void){ sentry__mutex_lock(&g_mutex); if (!g_initialized) { // load_modules(); // 这块先注释掉 g_initialized = true; } sentry_value_t modules = g_modules; sentry_value_incref(modules); sentry__mutex_unlock(&g_mutex); return modules;}
发现问题确实是出现 load_modules 里面,继续看 load_modules 内部干了啥,
static voidload_modules(void){ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); MODULEENTRY32W module = { 0 }; module.dwSize = sizeof(MODULEENTRY32W); g_modules = sentry_value_new_list(); if (Module32FirstW(snapshot, &module)) { do { HMODULE handle = LoadLibraryExW( module.szExePath, NULL, LOAD_LIBRARY_AS_DATAFILE); MEMORY_BASIC_INFORMATION vmem_info = { 0 }; if (handle && sizeof(vmem_info) == VirtualQuery( module.modBaseAddr, &vmem_info, sizeof(vmem_info)) && vmem_info.State == MEM_COMMIT) { sentry_value_t rv = sentry_value_new_object(); sentry_value_set_by_key( rv, "type", sentry_value_new_string("pe")); sentry_value_set_by_key(rv, "image_addr", sentry__value_new_addr((uint64_t)module.modBaseAddr)); sentry_value_set_by_key(rv, "image_size", sentry_value_new_int32((int32_t)module.modBaseSize)); sentry_value_set_by_key(rv, "code_file", sentry__value_new_string_from_wstr(module.szExePath)); extract_pdb_info((uintptr_t)module.modBaseAddr, rv); sentry_value_append(g_modules, rv); } FreeLibrary(handle); } while (Module32NextW(snapshot, &module)); }
结合堆栈显示的 dll 信息,
(No symbol) [nvd3d9wrap.dll 0x000024DD]
问题可能在 sentry 调用LoadLibraryExW 加载nvd3d9wrap.dll 时崩溃了,我们尝试在遍历 dll 时跳过它,并在测试机器上测试,发现仍然闪退
那问题出在哪里呢?
google 了一下,看是否有类似案例,查到了一个 bug 反馈
- https://bugzilla.mozilla.org/show_bug.cgi?id=1607574
关键部分:
sentry 加载 detoured.dll 时调到了映射地址,在该地址上继续加载nvd3d9wrap.dll,从而发生了崩溃
对此,我们尝试跳过 detoured.dll 的加载,程序没闪退
解决方案:
1. 只对 win7 之前的 windows 机器(包括 win7)做判断
2. 如果机器加载到 detoured.dll,则跳过该 dll 的加载
代码:
#define STATUS_SUCCESS (0x00000000)typedef NTSTATUS (WINAPI *RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);boolGetRealOSVersion(RTL_OSVERSIONINFOW *provi){ HMODULE hMod = GetModuleHandleW(L"ntdll.dll"); if (hMod) { RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)GetProcAddress(hMod, "RtlGetVersion"); if (fxPtr) { if (STATUS_SUCCESS == fxPtr(provi)) { return true; } } } return false;}boolIsWin8OrGreater(){ bool is_win7_or_greater = true; bool is_win8_or_greater = false; OSVERSIONINFOEX ver = {0}; ver.dwOSVersionInfoSize = sizeof(ver); if (VerifyVersionInfo(&ver, VER_MAJORVERSION | VER_MINORVERSION | VER_PRODUCT_TYPE, NULL)) { is_win7_or_greater = (ver.dwMajorVersion > 6) || ((ver.dwMajorVersion == 6) && (ver.dwMinorVersion >= 1)); is_win8_or_greater = (ver.dwMajorVersion > 6) || ((ver.dwMajorVersion == 6) && (ver.dwMinorVersion > 1)); } if (is_win7_or_greater) { RTL_OSVERSIONINFOW rovi = {0}; rovi.dwOSVersionInfoSize = sizeof(rovi); if (GetRealOSVersion(&rovi)) { is_win8_or_greater = (rovi.dwMajorVersion > 6) || ((rovi.dwMajorVersion == 6) && (rovi.dwMinorVersion > 1)); } } return is_win8_or_greater;}static voidload_modules(void){ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); MODULEENTRY32W module = {0}; module.dwSize = sizeof(MODULEENTRY32W); g_modules = sentry_value_new_list(); /* 部分 win7 电脑在加载 nvd3d9wrap.dll 会出现闪退,故跳过该部分代码 */ /* https://bugzilla.mozilla.org/show_bug.cgi?id=1607574 */ bool is_win8_or_later = IsWin8OrGreater(); if (Module32FirstW(snapshot, &module)) { do { if (!is_win8_or_later) { wchar_t *wstr_copy; if (_wcslwr_s(wstr_copy = _wcsdup(module.szModule), wcslen(module.szModule) + 1) == 0) { if (wcscmp(wstr_copy, L"detoured.dll") == 0) { free(wstr_copy); continue; } free(wstr_copy); } } HMODULE handle = LoadLibraryExW( module.szExePath, NULL, LOAD_LIBRARY_AS_DATAFILE); MEMORY_BASIC_INFORMATION vmem_info = { 0 };...
-
今日视点:Python爬虫实战,requests+openpyxl模块,爬取手机商品信息数据(附源码)
前言今天给大家介绍的是Python爬取手机商品信息数据,在这里给需要的小伙伴们代码,并且给出一点小心得...
来源: 全球观热点:sentry 在加载模块时闪退
世界微头条丨零基础开启元宇宙|如何快速创建虚拟形象
Git 的基本使用——笔记
今日视点:Python爬虫实战,requests+openpyxl模块,爬取手机商品信息数据(附源码)
k8s容器内部通过Prometheus Operator部署MySQL Exporter监控k8s集群外部的MySQL
网上打字员赚钱是真的吗?网上打字员是干什么的?
鸿蒙系统3.0支持哪些手机型号?鸿蒙系统3.0怎么升级?
微博借款利息高吗?微博借款利息和借呗哪个高?
余额宝消费红包是什么意思?余额宝消费红包怎么使用?
送男客户什么礼物合适?送男客户礼物前十件排名
电脑光驱是什么东西?电脑找不到光驱驱动器怎么办?
华硕笔记本如何下载驱动?华硕笔记本驱动怎么打开?
空的文件夹占内存吗?空的文件夹为什么删不掉?
DOTA是什么意思?dota和英雄联盟的区别有哪些?
如何提高电脑性能?提高电脑性能的方法有哪些?
环球热头条丨ADB批量截图,且用时间命名
每日信息:行为管理(锐捷智慧教室)
水溶性笔是什么意思?水溶性笔和油性笔的区别是什么?
白炽灯色温是多少?白炽灯色温4000-4600K是多少度?
八字有多少种排列组合?八字有食神代表什么?
荷月是几月的别称?十二个月的别称和雅称
酒店的英语怎么说?酒店前台的工作内容是什么?
全球关注:CAD.NET 批量打印、导出DPF
精选!为解决微信加群或拉人建群的痛点,我用时一个多月写了一个小程序
c++ 如何做出实现一组数据的实际索引
短信+邮箱验证码登录
今亮点!go-dongle 0.2.1 版本发布,一个轻量级、语义化的 golang 编码解码、加密解密库
当前快播:河北用上了无人驾驶农机:北斗加持 坐在屋里就把地给种了
今日要闻!奔驰、宝马、特斯拉相继取消收音机!广播公司担忧:有隐患
换机周期将创历史新高:长达43个月 你多久换一次?
波音、空客狂喜 印度将签史诗级飞机订单:一次买下500架
天天实时:创建全国首个ICU!我国重症医学奠基人陈德昌离世 享年90岁
【当前独家】公司产品太多了,怎么实现一次登录产品互通?
【世界新要闻】2799元配酷睿i5!小米迷你主机将开启众筹 便宜900元条件公布
环球热门:小米13黑色版图赏:直屏直边手感秒杀iPhone 14!
真爱粉!有米粉花近万元抢了两台小米13
世界快资讯:好评率超99% 小米MIX Fold 2推出月光银配色 雷军:镜面效果令人惊叹
天天热点评!比RTX 4090便宜5000 AMD RX 7900系列显卡年底供货20万块:备货充足
小米13系列供不应求!线上已售罄 3999元起
环球即时:差价1000元!一文了解小米13和13 Pro区别
世界观察:NASA猎户座登月飞船成功返回地球:美国完成重返月球第一步
环球观天下!手机“毒瘤”微信终于修复!转发文件多次保存问题解决:不占空间了
天天微头条丨算了吧!电脑RGB光效好看不好玩
59岁李连杰晒照引网友围观 “功夫皇帝”定居国外略显苍老
世界看热讯:Git从入门到实战
Python 基于xml.etree.ElementTree实现XML对比
天天微资讯!飞链云智能机器人-基于ChatGPT的有趣问答
穷人入侵TikTok直播间:躺着就能赚钱 真爽
焦点热讯:为了帮梅西赢球 我敲了一晚上的电子木鱼
环球速递!2022贺岁档总票房突破4亿!《阿凡达2》势不可挡 最快破亿
GPU CPU向量加法时间测试
快播:雷军运气爆棚:在小米手机官方活动 中奖一台小米13
世界资讯:小米音质最好智能音箱!小米Sound Pro开箱图赏
Windows OpenGL 图像透明度调节
焦点热文:异步批处理教程
小米首款万兆路由发布:1799元
天天速递!只要699元!小米旗舰降噪耳机Buds 4发布:HiFi音质
小米8款新品价格汇总:3999元的小米13爱不爱?
全球新资讯:雷军:只有两家做双尺寸双高端 一家是苹果 一家是小米
小米13正式亮相:金属直边 继续对标iPhone!
今亮点!3999元起!小米13正式发布:黄金尺寸小屏、满血徕卡镜头
不涨价 小米13价格良心了:顶配12+512GB还便宜200元
全球微动态丨小米13 Pro正式亮相:中框仅仅3.2毫米!科技纳米皮手感无敌
焦点消息!ELK+FileBeat日志分析系统
快看点丨差错控制
全球信息:Intel显卡驱动即将大更新!DX9、DX11老游戏有惊喜
环球快资讯:MIUI 14“剃刀计划”砍向应用臃肿:微信文件重复存储问题终于解决
全球快看点丨全新界面 系统大幅精简!MIUI 14正式发布
【世界聚看点】使webworker中支持使用import导入模块——threads.js
世界速看:说人话系列:DOM(Document Object Mode)究竟是怎么来的呢?
环球快报:俞敏洪称不敢进高档美发店:一顿好酒肉没有了 心疼
当前热点-达尔文错了?螃蟹竟在地球上出现了5次
全球新资讯:时间轮 (史上最全)
【天天聚看点】雷军晒小米13生产过程 由小米智能工厂全自动化装配
百事通!Intel独立显卡不做了?掌门人一句话 放心了!
长安深蓝SL03宣布涨价:预计上调2000元-8000元
环球快讯:沉船捞出165年前牛仔裤80万卖出:更有数不清的黄金
SpringMVC执行流程
全球快资讯丨任务调度系统-业务线资源隔离
天天微速讯:echarts设置暂无数据
老版本微博下线倒计时!新版已无法返回老版本
舒适降噪的天花板 索尼WH-1000XM5耳机跌破2000元
全球视点!苹果把果链撤出中国?难度可是地狱级的
天天滚动:SQLyog连接MYSQL时报错 Client does not support authentication protocol requested
世界快报:小米发布米家智能小厨宝7L S1:2000W速热、1年省电100度
播报:男子将手机改装成“偷拍神器”:摄像头改到耳机插孔 赚了30万
世界资讯:我迟早被这些AI绘画笑死
世界快报:买不到抗原检测试剂盒怎么办?不要慌
重点聚焦!Intel A750显卡新驱动性能实测:《CS:GO》帧数飙升79%
公众号附件怎么添加?还在用阅读原文的方式来添加吗,你已经落伍啦,现在大家都在用这个新方法,不仅方便还省事!
TabControl控件的简单使用-添加tab
【全球时快讯】Python爬虫实战,requests+xlwt模块,爬取螺蛳粉商品数据(附源码)
环球微速讯:Linux笔记03: Linux常用命令_3.3文件操作命令
新资讯:canvas分享
全球今头条!推特重推蓝V认证服务 苹果用户得多交3美元!马斯克也无能为力
每日焦点!三星S23 Ultra关键参数确定:首发高频版第二代骁龙8、祖传25W快充
童年记忆的黄桃罐头为啥突然火了?专家建议不要盲目囤
世界今头条!【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论
【世界快播报】刘强东称新冠比感冒还轻微!王石也发声:只有鼻子不舒服 10天转阴
全球今亮点!再见C罗!C罗赛后痛哭:葡萄牙0-1摩洛哥 非洲球队首进4强