一:背景 1. 讲故事 前段时间遇到了好几起关于窗体程序的 进程加载锁 引发的 程序卡死 和 线程暴涨 问题,这种 dump 分析难度较大,主要涉及到 Windows操作系统 和 C++ 的基础知识,所以有必要简单整理和大家分享一下,上 windbg 说话. 二:WinDbg 分析 1. 主线程此时在做什么 窗体程序的卡死,入口分析点在 主线程 上,使用 ~0s; k 命令即可. 0:000> ~0s; k ntdll!NtWaitForSingleObject+0x14: 00007ffc`6…
C#的网口通信 一.命令行 客户端程序:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;using System.Threading; namespace client{ class Program { private static byte…
一:背景 1. 讲故事 这几个月经常被朋友问,为什么不更新这个系列了,哈哈,确实停了好久,主要还是打基础去了,分析 dump 的能力不在于会灵活使用 windbg,而是对底层知识有一个深厚的理解,比如:汇编,C, C++,Win32 Api,虚拟内存,Windows 用户态和内核态,这是我今年看的书给大家分享一下. 前段时候微信上有位朋友说他的程序出现了卡死,所有线程都不工作了,听起来还挺吓人的,截图如下: 接下来直接上 WinDbg 分析吧. 二:Windbg 分析 1. 卡死分析 既然说程序…
一:背景 1. 讲故事 前段时间遇到了一个难度比较高的 dump,经过几个小时的探索,终于给找出来了,在这里做一下整理,希望对大家有所帮助,对自己也是一个总结,好了,老规矩,上 WinDBG 说话. 二:WinDbg 分析 1. 为什么会卡死 既然程序卡死,那肯定是被冻住了,所以看下主线程此时在做什么. 0:000:x86> !clrstack OS Thread Id: 0xe20 (0) Child SP IP Call Site 0034d5e8 000bc4b8 [HelperMetho…
一:背景 1.讲故事 前段时间有位朋友微信找到我,说他生产机器上的 Console 服务看起来像是卡死了,也不生成日志,对方也收不到我的httpclient请求,不知道程序出现什么情况了,特来寻求帮助. 哈哈,一般来说卡死的情况在窗体程序(WinForm,WPF) 上特别多,在 Console,WebApi 中相对较少,既然找到我,那就上 WinDbg 分析吧. 二:WinDbg 分析 1. 程序真的卡死了吗 程序之所以能跑的梭梭响,全靠线程帮忙,如果玩不转可能就是线程上出了点什么问题,接下来使…
一:背景 1.讲故事 前几天有位朋友找到我,说他的程序出现了偶发性崩溃,已经抓到了dump文件,Windows事件日志显示的崩溃点在 clr.dll 中,让我帮忙看下是怎么回事,那到底怎么回事呢? 上 WinDbg 说话. 二:WinDbg 分析 1. 崩溃点在哪里 如果是托管代码引发的崩溃,在线程列表上会有一个异常信息,可以用 !t 来验证下. 0:000> !t ThreadCount: 7 UnstartedThread: 0 BackgroundThread: 6 PendingThre…
一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧. 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主线程此时正在做什么? 可以用 ~0s ; k 看一下便知. 0:000> k # ChildEBP RetAddr 00 00aff168 75e3bb0a win32u!NtUserPeekMessage+0xc 01 00aff168 75e3ba7e USER32!_Pee…
背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信息打印到界面窗体上.界面上有两个QTableWidget窗体 "ui->can1tableWidget与ui->can2tableWidget",根据传上来的的数据某个字节信息为1.或2来打印到对应的窗体上.代码如下: QTableWidget *canselWidget =…
上位机的程序主要是解析图片和生成较好的代码,现在实现的功能有灰度打印,二值打印,轮廓打印,骨骼打印.当然,必不可少的是打印大小的控制.测试了一些图片,总体来说,打印速度依次加快,因为打印的内容依次减少.但是还有一些不太满意的地方,例如用轮廓和骨骼打印来打印文字时,东一块西一块,还没有空闲写行识别之后的排序.其实思路挺简单,膨胀文字或腐蚀背景使一行变为位置相邻的点集,然后在外包矩形内进行按x递增排序就可以了. 上位机总体功能分为三部分: 1.与下位机通讯,这部分建议先写好,才更利于后面的测试. 2…
渊源 大一的时候,学校开了门公共选修课,叫LabVIEW编程,当时的我当然还不知道LabVIEW是啥东东,但还是选了.上课的老师是机械学院的一个副教授.他给我们展示了好几个用LabVIEW做的项目.譬如油箱监控上位机等,已经不太记得了. 后来随着学习单片机.ARM等的串口操作.有时候一个美丽的上位机(尤其是能显示波形的上位机)在项目中给用户展示非常的实用.过了这么多年,尽管以前也用LabVIEW写过简单的温度监控上位机.但这次再拿起LabVIEW又好像从头開始一样,语法几已忘记殆尽. 定义通信格…