原创 聊一聊 C# 的線程本地存儲TLS到底是什麼

一:背景 1. 講故事 有朋友在後臺留言讓我說一下C#的 ThreadStatic 線程本地存儲是怎麼玩的?這麼說吧,C#的ThreadStatic是假的,因爲C#完全是由CLR(C++)承載的,言外之意C#的線程本地存儲,用的就是用C++

原创 記一次 .NET某股票交易軟件 靈異崩潰分析

一:背景 1. 講故事 在dump分析的旅程中也會碰到一些讓我無法解釋的靈異現象,追過這個系列的朋友應該知道,上一篇我聊過 宇宙射線 導致的程序崩潰,後來我又發現了一例,而這一例恰恰是高鐵的 列控連鎖一體化 程序,所以更加讓我確定這是由於

原创 記一次 .NET某工控 宇宙射線 導致程序崩潰分析

一:背景 1. 講故事 爲什麼要提 宇宙射線, 太陽耀斑 導致的程序崩潰呢?主要是昨天在知乎上看了這篇文章:莫非我遇到了傳說中的bug? ,由於 rip 中的0x41變成了0x61出現了bit位翻轉導致程序崩潰,截圖如下: 下面的評論大

原创 聊一聊 C# 線程切換後上下文都去了哪裏

一:背景 1. 講故事 總會有一些朋友問一個問題,在 Windows 中線程做了上下文切換,請問被切的線程他的寄存器上下文都去了哪裏?能不能給我挖出來?這個問題其實比較底層,如果對操作系統沒有個體系層面的理解以及做過源碼分析,其實很難說明白

原创 記一次 .NET 某藥廠業務系統 CPU爆高分析

一:背景 1. 講故事 前段時間有位朋友找到我,說他們的程序出現了CPU爆高,讓我幫忙看下怎麼回事?這種問題好的辦法就是抓個dump丟給我,推薦的工具就是用 procdump 自動化抓捕。 二:Windbg 分析 1. CPU 真的爆高嗎

原创 聊一聊 .NET高級調試 中必知的符號表

一:背景 1. 講故事 在高級調試的旅行中,發現有不少人對符號表不是很清楚,其實簡而言之符號表中記錄着一些程序的生物特徵,比如哪個地址是函數(簽名信息),哪個地址是全局變量,靜態變量,行號是多少,數據類型是什麼 等等,目的就是輔助我們可視化

原创 記一次 .NET 某新能源材料檢測系統 崩潰分析

一:背景 1. 講故事 上週有位朋友找到我,說他的程序經常會偶發性崩潰,一直沒找到原因,自己也抓了dump 也沒分析出個所以然,讓我幫忙看下怎麼回事,那既然有 dump,那就開始分析唄。 二:Windbg 分析 1. 到底是哪裏的崩潰 一直

原创 記一次 .NET 某零售管理系統 存儲不足分析

一:背景 1. 講故事 前幾天有位朋友找到我,說他的程序會偶發性的報 存儲空間不足,無法處理此命令 的錯誤,讓我幫忙看下到底怎麼回事,哈哈,人家是有備而來,dump都準備好了,話不多說,直接分析開幹。 二:WinDbg 分析 1. 捕獲du

原创 聊一聊 .NET高級調試 中的一些內存術語

一:背景 1. 講故事 在高級調試的旅程中,經常會有一些朋友問我什麼是 工作集(內存),什麼是 提交大小,什麼是 Virtual Size, 什麼是 Working Set 。。。截圖如下: 既然有很多朋友問,這些用口頭也不怎麼好描述,剛

原创 高級調試常見疑問彙總

[如何開啓WinDbg本機調試問題] (https://www.cnblogs.com/huangxincheng/articles/17864581.html) [調試託管代碼無行號問題] (https://www.cnblogs.co

原创 對 .NET程序2G虛擬地址緊張崩潰 的最後一次反思

一:背景 1. 講故事 最近接連遇到了幾起 2G 虛擬地址緊張 導致的程序崩潰,基本上 90% 都集中在醫療行業,真的很無語,他們用的都是一些上古的 XP,Windows7 x86,我也知道技術人很難也基本無法推動硬件系統和設備的升級,這裏

原创 如何通過 wireshark 捕獲 C# 上傳的圖片

一:背景 1. 講故事 這些天計劃好好研究下tcp/ip,以及socket套接字,畢竟工控中設計到各種交互協議,如果只是模模糊糊的瞭解,對分析此類dump還是非常不利的,而研究協議最好的入手點就是用抓包工具 wireshark,廢話不多說,

原创 記一次 .NET 某券商論壇系統 卡死分析

一:背景 1. 講故事 前幾個月有位朋友找到我,說他們的的web程序沒有響應了,而且監控發現線程數特別高,內存也特別大,讓我幫忙看一下怎麼回事,現在回過頭來幾經波折,回味價值太濃了。 二:程序到底經歷了什麼 1. 在線程上找原因 這個程序內

原创 記一次 .NET 某工控電池檢測系統 卡死分析

一:背景 1. 講故事 前幾天有位朋友找到我,說他的窗體程序有卡死現象,讓我幫忙看下怎麼回事,解決這種問題就需要在卡死的時候抓一個dump下來,拿到dump之後就可以分析了。 二:爲什麼會卡死 1. 觀察主線程 窗體程序的卡死,需要觀察主線

原创 聊一聊 tcp/ip 在.NET故障分析的重要性

一:背景 1. 講故事 這段時間分析了幾個和網絡故障有關的.NET程序之後,真的越來越體會到計算機基礎課的重要,比如 計算機網絡 課,如果沒有對 tcpip協議 的深刻理解,解決這些問題真的很難,因爲你只能在高層做黑盒測試,你無法看到 tc