日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

記一次 .NET某半導體CIM系統崩潰分析

來源: 責編: 時間:2024-03-26 09:36:50 243觀看
導讀一:背景1. 講故事前些天有一位朋友在公眾號上找到我,說他們的WinForm程序部署在20多臺機器上,只有兩臺機器上的程序會出現崩潰的情況,自己找了好久也沒分析出來,讓我幫忙看下怎么回事,就喜歡這些有點調試基礎的,dump也不需要

一:背景

1. 講故事

前些天有一位朋友在公眾號上找到我,說他們的WinForm程序部署在20多臺機器上,只有兩臺機器上的程序會出現崩潰的情況,自己找了好久也沒分析出來,讓我幫忙看下怎么回事,就喜歡這些有點調試基礎的,dump也不需要我指導怎么去抓,接下來我們就上windbg開始分析吧。2fb28資訊網——每日最新資訊28at.com

二:WinDbg分析

1. 為什么會崩潰

尋找崩潰的表象比較簡單,使用 windbg 的 !analyze -v 命令即可。2fb28資訊網——每日最新資訊28at.com

0:000> !analyze -v...EXCEPTION_RECORD:  (.exr -1)ExceptionAddress: 0000000000000000   ExceptionCode: 80000003 (Break instruction exception)  ExceptionFlags: 00000000NumberParameters: 0...STACK_TEXT:  0000003f`76f7ed58 00007ffa`f7c66d88     : 0000003f`00006120 00007ffa`f7bf98da 00000000`00000000 0000e4f5`bb3ba231 : user32!NtUserWaitMessage+0xa0000003f`76f7ed60 00007ffa`f7bf9517     : 0000003f`00006120 0000003f`76f7ee80 00000000`00000000 00000000`00000000 : System_Windows_Forms_ni+0x2b6d880000003f`76f7ee10 00007ffa`f7bf8c2c     : 0000003f`0006ec30 0000003f`00000001 0000003f`000c88c0 00000000`00000000 : System_Windows_Forms_ni+0x2495170000003f`76f7ef10 00007ffa`f7bf8a25     : 0000003f`00006120 00000000`ffffffff 0000003f`00054848 0000003f`76f7f300 : System_Windows_Forms_ni+0x248c2c0000003f`76f7efa0 00007ffa`9b4a0a08     : 0000003f`00007970 00000000`ffffffff 0000003f`000c88c0 0000003f`770bda90 : System_Windows_Forms_ni+0x248a250000003f`76f7f000 00007ffa`fab13753     : 00000000`00000001 0000003f`76f7f530 00007ffa`fac6710d 00000000`00000001 : 0x00007ffa`9b4a0a080000003f`76f7f040 00007ffa`fab1361c     : 0000003f`00003330 00007ffa`f9acd94c 00000000`20000001 0000003f`00000000 : clr!CallDescrWorkerInternal+0x830000003f`76f7f080 00007ffa`fab144d3     : 00000000`00000000 00000000`00000004 0000003f`76f7f300 0000003f`76f7f3b8 : clr!CallDescrWorkerWithHandler+0x4e0000003f`76f7f0c0 00007ffa`fac6f75a     : 0000003f`76f7f200 00000000`00000000 00000000`00000000 00000000`00000000 : clr!MethodDescCallSite::CallTargetWorker+0x2af0000003f`76f7f250 00007ffa`fac6f596     : 00000000`00000000 00000000`00000001 0000003f`00000000 00000000`00000000 : clr!RunMain+0x1ba0000003f`76f7f430 00007ffa`fac6f4d4     : 0000003f`770bda90 0000003f`000015b0 0000003f`770bda90 0000003f`77093490 : clr!Assembly::ExecuteMainMethod+0xba0000003f`76f7f720 00007ffa`fac6ea02     : 0000003f`76f7fd88 0000003f`76de0000 00000000`00000000 00000000`00000000 : clr!SystemDomain::ExecuteMainMethod+0x6b90000003f`76f7fd60 00007ffa`fac6e9b2     : 0000003f`76de0000 0000003f`76f7fee0 00000000`00000000 00007ffb`03c420e8 : clr!ExecuteEXE+0x430000003f`76f7fdd0 00007ffa`fac6e8f4     : ffffffff`ffffffff 00000000`00000000 00000000`00000000 00000000`00000000 : clr!_CorExeMainInternal+0xb20000003f`76f7fe60 00007ffb`03be6cf5     : 00000000`00000000 00000000`00000091 00000000`00000000 0000003f`76f7fe48 : clr!CorExeMain+0x140000003f`76f7fea0 00007ffb`03c8ea5b     : 00000000`00000000 00007ffa`fac6e8e0 00000000`00000000 00000000`00000000 : mscoreei!CorExeMain+0xe00000003f`76f7fef0 00007ffb`0dc716ad     : 00007ffb`03be0000 00000000`00000000 00000000`00000000 00000000`00000000 : mscoree!_CorExeMain_Exported+0xcb0000003f`76f7ff20 00007ffb`0f924629     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd0000003f`76f7ff50 00000000`00000000     : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1dSTACK_COMMAND:  ~0s; .ecxr ; kb...

從卦中看,真的吸了一口涼氣,尼瑪這dump沒記錄到 crash 信息,有些朋友說這個 int 3 不是嗎?簡單的說不是,它是一個軟trap,抓dump的時候會有一個進程的凍結,這個凍結就是 int 3,所以你看dump中有這個異常 99% 都是正常的。2fb28資訊網——每日最新資訊28at.com

2. 異常哪里去了

按往常的套路,我都會推薦procdump這款工具讓朋友再抓一下,在重抓之前先看看可還有其他線索,可以用 !t 看看托管線程上是否掛了異常。2fb28資訊網——每日最新資訊28at.com

0:000> !tThreadCount:      76UnstartedThread:  0BackgroundThread: 69PendingThread:    0DeadThread:       6Hosted Runtime:   no                                                                                                        Lock         ID OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception   0    1 26c4 0000003f770bda90    26020 Preemptive  0000000000000000:0000000000000000 0000003f77093490 0     STA    ...  74   77 c544 0000003f1a08c470    21220 Preemptive  0000000000000000:0000000000000000 0000003f77093490 0     Ukn System.ExecutionEngineException 0000003f000011f8  75   78 18a88 0000003f1a329ae0  8029220 Preemptive  0000000000000000:0000000000000000 0000003f77093490 0     MTA (Threadpool Completion Port)

從卦中可以看到有一個線程拋了 System.ExecutionEngineException 異常,這是一個災難性的情況,表示 CLR 在執行自身代碼的時候崩掉了,驚訝之余趕緊看看它的線程棧為什么會崩。2fb28資訊網——每日最新資訊28at.com

0:074> k # Child-SP          RetAddr               Call Site00 0000003f`1bafea90 00007ffa`fb0283aa     clr!WKS::gc_heap::background_mark_simple+0x3601 0000003f`1bafeac0 00007ffa`fb028701     clr!WKS::gc_heap::revisit_written_page+0x2fe02 0000003f`1bafeb50 00007ffa`fb01ffec     clr!WKS::gc_heap::revisit_written_pages+0x25103 0000003f`1bafec10 00007ffa`facefd01     clr!WKS::gc_heap::background_mark_phase+0x29804 0000003f`1bafeca0 00007ffa`fb021fe5     clr!WKS::gc_heap::gc1+0xc005 0000003f`1bafed10 00007ffa`fab33e1e     clr!WKS::gc_heap::bgc_thread_function+0x16906 0000003f`1bafed50 00007ffb`0dc716ad     clr!Thread::intermediateThreadProc+0x7d07 0000003f`1baff810 00007ffb`0f924629     kernel32!BaseThreadInitThunk+0xd08 0000003f`1baff840 00000000`00000000     ntdll!RtlUserThreadStart+0x1d0:074> rrax=000000001f808000 rbx=0000003f1bafe870 rcx=0000003efac80140rdx=0000003f01000000 rsi=0000000000000000 rdi=0000003f1bafe380rip=00007ffafb020c06 rsp=0000003f1bafea90 rbp=0000003f01c63270 r8=0000000000000000  r9=0000003f01c64000 r10=0000003f04271000r11=0000000000000001 r12=00007ffa9bca83c0 r13=0000003f01c632a8r14=ffffffffffffffff r15=0000003f01c63000iopl=0         nv up ei pl zr na po nccs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010244clr!WKS::gc_heap::background_mark_simple+0x36:00007ffa`fb020c06 41f70000000080  test    dword ptr [r8],80000000h ds:00000000`00000000=????????

從卦中信息看,當前是一個 bgc 線程,在后臺標記對象的時候踩到了0區導致的崩潰,經驗告訴我,是不是此時的托管堆損壞了? 可以用 !verifyheap 驗證下。2fb28資訊網——每日最新資訊28at.com

0:000> !verifyheap No heap corruption detected.

從卦中信息看,當前托管堆并沒有損壞,作為一個經常為sos輸出坑過的人,現在我是不相信這個輸出的,所以我要找一下這個 r8 對象到底是什么對象,接下來反匯編下 background_mark_simple 方法。2fb28資訊網——每日最新資訊28at.com

0:074> ub 00007ffa`fb020c06clr!WKS::gc_heap::background_mark_simple+0x1a:00007ffa`fb020bea 0941d3          or      dword ptr [rcx-2Dh],eax00007ffa`fb020bed e048            loopne  clr!WKS::gc_heap::background_mark_simple+0x67 (00007ffa`fb020c37)00007ffa`fb020bef 8b0dd3253c00    mov     ecx,dword ptr [clr!WKS::gc_heap::mark_array (00007ffa`fb3e31c8)]00007ffa`fb020bf5 44850481        test    dword ptr [rcx+rax*4],r8d00007ffa`fb020bf9 7548            jne     clr!WKS::gc_heap::background_mark_simple+0x73 (00007ffa`fb020c43)00007ffa`fb020bfb 44090481        or      dword ptr [rcx+rax*4],r8d00007ffa`fb020bff 4c8b02          mov     r8,qword ptr [rdx]00007ffa`fb020c02 4983e0fe        and     r8,0FFFFFFFFFFFFFFFEh0:074> r rdxrdx=0000003f010000000:074> !lno rdxBefore:  0000003f00ffff38          512 (0x200) xxx.xxxAfter:   0000003f01000138           32 (0x20) System.StringHeap local consistency confirmed.0:074> ? 0000003f01000000 - 0000003f00ffff38Evaluate expression: 200 = 00000000`000000c80:074> !do 0000003f00ffff38Name:        xxx.xxxMethodTable: 00007ffa9c0ac278EEClass:     00007ffa9c095b20Size:        512(0x200) bytesFields:              MT    Field   Offset                 Type VT     Attr            Value Name...00007ffaf9d1da88  40012e6       c8        System.String  0 instance 0000000000000000 <OPPORTUNITY>k__BackingField...

經過我上面的一頓分析,原來bgc標記的對象是 <OPPORTUNITY>k__BackingField 字段,同時也驗證了確實托管堆沒有損壞,接下來的問題是為什么BGC在mark這個字段的時候拋出來了異常呢?2fb28資訊網——每日最新資訊28at.com

3. 繼續尋找真相

找不到突破口那就只能從線程棧上去挖,熟悉 bgc 后臺標記的朋友應該知道,后臺標記會分成三個階段。2fb28資訊網——每日最新資訊28at.com

  • 初始標記階段
  • 并發標記階段
  • 最終標記階段

截一張我在 .NET高級調試訓練營 PPT里的圖。2fb28資訊網——每日最新資訊28at.com

接下來的問題是這個程序目前處于哪一個階段呢?根據線程棧上的 revisit_written_pages 方法,很顯然是處于第二階段,在第二階段中為了能夠識別對象修改的情況,CLR 使用了 Win32 的GetWriteWatch函數對內存頁進行監控,監控到的臟內存頁會在第三階段做最后的清洗。2fb28資訊網——每日最新資訊28at.com

說了這么多,有沒有源碼支撐呢?這里我們簡單看一下 coreclr 的源代碼即可。2fb28資訊網——每日最新資訊28at.com

void gc_heap::revisit_written_pages(BOOL concurrent_p, BOOL reset_only_p){    get_write_watch_for_gc_heap(reset_watch_state, base_address, region_size,                             (void**)background_written_addresses,                             &bcount, is_runtime_suspended);}// staticvoid gc_heap::get_write_watch_for_gc_heap(bool reset, void * base_address, size_t region_size,                                          void * *dirty_pages, uintptr_t * dirty_page_count_ref,                                          bool is_runtime_suspended){    bool success = GCToOSInterface::GetWriteWatch(reset, base_address, region_size, dirty_pages,    dirty_page_count_ref);}bool GCToOSInterface::GetWriteWatch(bool resetState, void * address, size_t size, void * *pageAddresses, uintptr_t * pageAddressesCount){    uint32_t flags = resetState ? 1 : 0;    ULONG granularity;    bool success = ::GetWriteWatch(flags, address, size, pageAddresses, (ULONG_PTR*)pageAddressesCount, &granularity) == 0;    if (success)    {        assert(granularity == OS_PAGE_SIZE);    }    return success;}

給了這么多的代碼,主要是想說 bgc的并發標記利用了 Windows 提供的功能,結合朋友說的只有兩臺機器會出現這種情況,到這里大概可以給出兩種方案:2fb28資訊網——每日最新資訊28at.com

  1. 更新Windows補丁,升級framework,大概率是兩者的兼容性問題,導致內存頁監控上出了問題。
  2. 修改配置文件禁用 bgc,這樣就不會走這些邏輯,從根子上繞過這個問題。

三:總結

說實話在我的dump分析旅程中,這個dump的分析難度還是比較大的,它考驗著你對bgc線程底層運作的理解,所幸的是我在調試訓練營里用windbg讓大家親眼目睹了后臺標記三階段的詳細過程,真是三生有幸!2fb28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-79304-0.html記一次 .NET某半導體CIM系統崩潰分析

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python中的Python元組轉換為JSON對象的過程

下一篇: 一文詳解Spark內存模型原理,面試輕松搞定

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美三级乱人伦电影| 久久久水蜜桃av免费网站| 欧美成人午夜| 亚洲午夜伦理| 亚洲福利小视频| 国产精品久久91| 国产欧美日韩视频在线观看| 国产伦一区二区三区色一情| 欧美成人午夜激情| 欧美日韩国产一区精品一区| 麻豆久久婷婷| 欧美在线一级va免费观看| 99国产精品久久久久老师| 红桃视频国产精品| 欧美99久久| 久久亚洲欧美国产精品乐播| 欧美一级理论片| 亚洲欧美日本国产有色| 一区二区三区偷拍| 99国内精品久久| 亚洲激情第一区| 韩日视频一区| 国产综合色精品一区二区三区| 国产欧美日韩一区二区三区| 亚洲成色777777女色窝| 国产欧美一二三区| 亚洲激情另类| 小黄鸭视频精品导航| 欧美激情第3页| 免费日韩一区二区| 久久综合国产精品台湾中文娱乐网| 欧美精品1区2区| 欧美在线观看视频在线| 亚洲欧美日韩天堂一区二区| 嫩草伊人久久精品少妇av杨幂| 欧美性片在线观看| 欧美日韩中文精品| 国产精品国产三级国产普通话99| 国产精品久久久久永久免费观看| 一色屋精品视频在线观看网站| 一区二区三区在线观看视频 | 亚洲成色www8888| 亚洲欧美日韩国产综合| 欧美劲爆第一页| 在线播放日韩| 亚洲精品乱码久久久久久久久| 最近中文字幕mv在线一区二区三区四区| 在线欧美影院| 午夜精品一区二区在线观看| 性亚洲最疯狂xxxx高清| 久久久久久九九九九| 乱人伦精品视频在线观看| 国产精品亚洲综合一区在线观看| 国产欧美在线播放| 一本大道av伊人久久综合| 亚洲一区在线免费| 欧美亚洲三级| 久久综合色一综合色88| 欧美激情第二页| 免播放器亚洲一区| 国模私拍视频一区| 日韩午夜在线播放| 午夜亚洲视频| 国产精品草草| 国内精品一区二区| 在线观看成人小视频| 国产三级精品三级| 在线观看日韩| 久久精品天堂| 欧美精选午夜久久久乱码6080| 欧美四级在线| 国产亚洲精品bv在线观看| 最新日韩在线| 亚洲男女自偷自拍| 欧美视频免费看| 一本色道**综合亚洲精品蜜桃冫 | 久久精品视频在线观看| 欧美成人午夜激情| 国产精品视频xxx| 伊人久久大香线蕉综合热线| 久久精品99无色码中文字幕| 欧美精品成人一区二区在线观看| 国产精品久久久久一区二区| 亚洲国产精品一区| 亚洲自拍偷拍一区| 亚洲精品黄网在线观看| 欧美亚洲视频一区二区| 欧美日韩精品系列| 国产精品另类一区| 午夜在线视频一区二区区别| 久久精品视频免费| 欧美人交a欧美精品| 国产无遮挡一区二区三区毛片日本| 在线亚洲精品福利网址导航| 另类尿喷潮videofree | 国产精品高清网站| 亚洲一区二区三区在线播放| 美女网站在线免费欧美精品| 亚洲第一福利在线观看| 欧美电影在线免费观看网站| 国产亚洲精品久久久久婷婷瑜伽| 欧美亚洲专区| 精品不卡在线| 欧美黄色片免费观看| 国内精品久久久久影院 日本资源| 久久成人精品视频| 欧美视频在线免费看| 亚洲免费伊人电影在线观看av| 欧美成在线观看| 日韩视频在线永久播放| 欧美日韩一区二区在线观看视频 | 久久影视精品| 国产日韩欧美精品在线| 久久精品国产亚洲高清剧情介绍| 国产精品久久7| 99精品99久久久久久宅男| 欧美性猛交视频| 久久精品一本| 亚洲精品一区在线观看香蕉| 男人插女人欧美| 狠狠狠色丁香婷婷综合久久五月| 老司机精品久久| 在线观看视频一区二区欧美日韩| 欧美精品日韩精品| 亚洲免费视频在线观看| 精品成人一区二区三区四区| 久久久精品性| 国产主播精品在线| 性欧美暴力猛交另类hd| 在线观看日韩欧美| 欧美视频一区在线| 久久婷婷人人澡人人喊人人爽| 亚洲精品少妇网址| 国产精品一区三区| 免费人成精品欧美精品| 亚洲天堂av在线免费| 欧美午夜性色大片在线观看| 欧美一区三区三区高中清蜜桃 | 亚洲精品影视| 欧美激情一区二区三区四区| 亚洲嫩草精品久久| 国产精品一区二区女厕厕| 久久婷婷国产综合尤物精品 | 日韩亚洲欧美高清| 欧美日韩亚洲一区三区| 亚洲视频播放| 伊人精品久久久久7777| 欧美深夜福利| 麻豆精品视频在线观看| 亚洲高清不卡在线观看| 另类天堂av| 亚洲午夜电影网| 在线精品国精品国产尤物884a| 欧美视频在线观看视频极品| 玖玖在线精品| 性色av一区二区三区红粉影视| 亚洲精品一区二区三区99| 国产午夜精品久久久久久久| 欧美日韩精品免费观看| 午夜激情综合网| 国产视频观看一区| 欧美激情综合五月色丁香| 中文国产一区| 亚洲福利小视频| 国产伦精品一区| 欧美日韩精品在线观看| 午夜精品一区二区三区电影天堂 | 一区二区三区在线视频免费观看| 欧美性一二三区| 欧美成人国产一区二区| 久久九九精品99国产精品| 亚洲欧美日韩高清| 一区二区三区欧美日韩| 国产麻豆日韩| 欧美午夜片在线免费观看| 欧美一区二区三区在| 一区二区久久久久久| 亚洲国产精品一区二区久| 国产主播精品| 国产日韩视频| 美日韩精品免费观看视频| 欧美一区二区精美| 亚洲黄色大片| 今天的高清视频免费播放成人| 国产美女精品一区二区三区| 欧美日韩一区二区三区四区在线观看| 欧美国产一区二区三区激情无套| 玖玖综合伊人| 久久亚洲国产精品一区二区| 久久激情五月丁香伊人| 欧美综合国产精品久久丁香| 亚洲欧美视频在线观看视频| 1000精品久久久久久久久| 国产亚洲视频在线| 欧美理论电影在线播放| 牛牛影视久久网| 免费人成网站在线观看欧美高清| 久久久久久一区二区| 久久九九久精品国产免费直播 | 欧美屁股在线| 欧美日韩国产麻豆| 欧美自拍偷拍| 久久成人人人人精品欧| 香蕉久久夜色精品国产|