使用StackStrace获取属性名称的惨痛教训
作者:V君 发布于:2017-7-21 18:04 Friday 分类:折腾手记
TL;DR: 改用 CallerMemberName 的方式.
必须扯,内容再少也要扯!
一直以来, 封装配置访问类时, 根据同样的只读属性名称去取字典值或查数据库.
尽管比较新的 nameof 关键字可用, 但还是需要重复打字, 这非常不爽.
于是自作聪明的咱就抓取上一个堆栈帧, 取出方法名的方式代替Key.
定义一个无参方法 GetValue ,里面去抓 StackTrace,
一般情况下, 只读属性的方法名是 get_XXXX, 这种情况直接去掉头就可以吃了.
然后只读属性的 getter 就直接无参调用 GetValue(),
看到一大堆只读属性调用同一个无参方法是不是很魔法啊? 乂目
public string ConfA => GetValue();
public string ConfB => GetValue();
public string ConfC => GetValue();
然而, 二般情况出现了... 优化编译并 IL-Repack 之后 --
只读访问器的堆栈帧不见了!!! EXM?!
错误地取到上一个方法的名字, 导致配置读不出来 囧....
即使在 GetValue 方法加上了 NotInlining 的特性, 问题仍旧存在...
放狗出去找爆栈, 在不太相关的问题上看到有说用 CallerMemberName 可以.
用了之后才知道爽, 问题解决了!
板载集成网卡问题导致Flash加载失败
作者:V君 发布于:2017-6-23 16:57 Friday 分类:挖坑经验
终更:
关闭中断调整之后用了几天, 问题又出现了, 无论高级选项怎么整都没用.
只好花点钱搞一张独立网卡, 装上之后禁用原来的集成网卡, 问题解决...
推定集成网卡有毛病 _(:з」∠)_
原标题:
莫名其妙:有线网卡驱动设置「中断调整」Interrupt Moderation导致Flash加载失败EXM???
原内容:
TL;DR: 去属性高级,将其关闭,Flash 加载失败的问题解决. 不知道为啥!
必须扯扯排查过程, 信息量太少了! (´∀((☆ミつ
一个WEB项目测试过程中发现 Flash 上传组件不工作, 右键显示为「影片未加载」.
然后发现只有这台机出现问题, 别的机器都好好的.
不仅上传组件, 所有的在线Flash都受影响.
试着直接在浏览器上输入 swf 的完整 url -- 失败
换IE/FF/360(测试的机器啥都有) -- 统统失败
试着在 Fiddler 中的 Composer 中发出请求, 得到的是超时代替的 504 错误.
最后 telnet 手动发起 HTTP 请求 -- 却能收到响应数据,尽管是一坨乱码,swf 是二进制的嘛!
排除了网络和 Sockets 组件的问题.
这时候只能怀疑是系统里面 Sockets 到浏览器之间出毛病了, 比如 wininet.dll 之类的.
这是没法轻易修复了, 就重装了系统.....
装完之后现象依旧存在, 三脸懵逼.
和重装之前没有变化的只剩下IP了.
由于我们为了方便访问, 设置了固定IP, 试着改一下IP,
居然成功访问了一次, 清除缓存之后又不行了.
只好发挥死马精神, 掏出一个 USB-WiFi 拇指头插上,禁用有线网卡 -- 故障现象消失了
反过用有线网卡来能复现故障现象 -- 难道是有线网卡的锅???
抱着疑虑去看看调整MAC地址这类做法能不能打醒, 就去到网卡属性高级了.
眼前一亮, 发现好多奇怪的束手束脚的设置, 比如节能啦,调整啦,减负啦 的.
一口气把能关的全部关掉, 然后居然 -- Flash 正常加载了... EXM???
清空缓存, 把配置打回去, 能复现, 这说明问题肯定在某些选项中.
见到「中断调整」这个选项比较不顺眼, 单独关掉之后 -- Flash 加载出来了!
又把它打开,清除缓存 -- 可复现!
于是就懵逼到这里. _(:з」∠)_ (´∀((☆ミつ
标签: 软件开发 软件故障诊断 HTTP Web技术 硬件故障
在MySQL用EF6遇到的那些坑
作者:V君 发布于:2017-6-20 16:12 Tuesday 分类:挖坑经验
把在 MySQL 用 EF 遇到的各种坑记下来,挂起假古文
首次创建迁移(初始迁移)之前应做好预处理:
避免生成的SQL语句有架构名称(dbo), 不这样做将会在今后的更新迁移中掉坑.
不要等你发现之后再加上这句, 要重建数据库才能避免更多问题.
(先记一个,有新的坑再追加, (´∀((☆ミつ)
活久见:有些异常是不能被catch(Exception)捕获的,你得把catch参数去掉
作者:V君 发布于:2017-6-14 0:25 Wednesday 分类:折腾手记
TL;DR:
当你发现本应被捕获的异常却被无视 try-catch 语句时,
你应该试着去掉 catch(Exception ex) 中高亮的部分
写成 try {....} catch{....} 这种写法将不能直接取得异常实例,
你可以将上下文对象值记录下来作为排查线索。
本例:
将 MVC 5.2.3 站点部署到装了 mono 4.2.2 的Debian@树莓派。
首先就遇到一大堆兼容性问题。去掉一系列不兼容的组件。
(ApplicationInsights系列、CodeDom系列)
总算能报出些看起来有点线索的异常。
System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
at System.Reflection.Assembly.GetTypes () <0x721db540 + 0x00023> in <filename unknown>:0
at Ease.Ioc.IocManager.RegisterInterface (System.Reflection.Assembly[] assemblies, System.Type iface,
System.Func`1 lifetimeManager) <0x721db0c0 + 0x000fb> in <filename unknown>:0
at Ease.Ioc.IocManager..ctor () <0x721fb130 + 0x00283> in <filename unknown>:0
at Ease.Ioc.IocManager..cctor () <0x721faff8 + 0x00027> in <filename unknown>:0
这是模仿 ABP 在当前应用域中的所有程序集中寻找实现了指定接口的类,然后加到 IoC 容器。
(哎……谁让 ABP 还不支持 mono 呢。。。)
在对某个程序集调用 GetType 时爆炸了……
于是在其周围加上常规异常处理 try-catch(Exception) 试图找出有问题的程序集。
然而异常依旧引发,就跟没写 try-catch(Exception) 一样……
试着调整方法结构,避免一些在首次访问方法就引发异常的状况 —— 无果……
心一横,去掉 catch 语句的参数,记下当前调用 GetTypes 的程序集。
try
{
types.AddRange(asm.GetTypes().Where(p => false == p.IsAbstract && false == p.IsInterface && iface.IsAssignableFrom(p)));
}
catch
{
throw new Exception("Asm load fail?" + asm);
}
功夫不负有心人 or 瞎猫撞上死耗子? bingo! 抓到你啦!
Asm load fail?System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
咋办? 没办法哇! 试着把引用干掉看看吧…… 果然就没事儿了!
稍稍去了解一下那玩意儿,发现是一堆辅助类, 反正一时半会也用不上。
于是就这样,用作类似 Hello world 的站点首页就成功呈现出来啦!
—— 尽管是乱码…… 因为偷懒直接输出 Content 嘛! 接下来可以慢慢折腾啦!
标签: 软件开发 树莓派 C# linux mono 运行时错误
排查ASP.NET响应迟钝.用DebugDiag分析转储,再用WinDbg+sosex查看调用参数
作者:V君 发布于:2017-6-9 17:01 Friday 分类:填坑经验
WEB应用程序出现响应很慢甚至卡死的现象,
Server Admin 通过 DebugDiag 分析转储发现有个请求特别耗时间 (一个小时以上)
于是锅放到我这里辣.
DebugDiag得出堆栈已经显示具体代码位置了,
想知道哪些数据被操作,还需要知道传入了哪些参数,这时候必须请出WinDbg+sosex了.
参考其 sosex 的 readme.txt 或 MSDN文章 得知 !mk 命令可以查看当前线程调用堆栈
要切换当前线程 使用 ~*s 命令 (更多命令参见 windbg.info文章 )
搞起! 先 .load sosex 再 ~*s 然后 !mk 这样就可以看到刚才的堆栈了,确保没选错线程
然而参数还没出来... 别急,呔! !mdso 列出当前线程堆栈上下文对象值
这个命令支持使用参数 /t:类名 来筛选结果. 这次排查过程顺利得有些出乎意料哇 乂目.
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)