当前位置: 首页 > news >正文

网站运营团队各岗位的职责是什么宁波网络营销公司

网站运营团队各岗位的职责是什么,宁波网络营销公司,做网站需多少钱,网站做的不满意一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主…

一:背景

1. 讲故事

前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。

二:WinDbg 分析

1. 为什么会卡死

因为是窗体程序,理所当然就是看主线程此时正在做什么? 可以用 ~0s ; k 看一下便知。


0:000> k# ChildEBP RetAddr      
00 00aff168 75e3bb0a     win32u!NtUserPeekMessage+0xc
01 00aff168 75e3ba7e     USER32!_PeekMessage+0x2a
02 00aff1a4 6a5d711c     USER32!PeekMessageW+0x16e
03 00aff1f0 6a5841a6     System_Windows_Forms_ni+0x23711c
...
17 00afffbc 00000000     ntdll!_RtlUserThreadStart+0x1b

从线程栈来看,当前的方法卡在 win32u!NtUserPeekMessage 上, 熟悉 Windows 窗体消息的朋友都知道这是提取 消息队列 的常规逻辑,这个方法的下一步就是通过 Wow64SystemServiceCall 进入到 Windows内核态,可以用 u 命令验证一下。


0:000> ub win32u!NtUserPeekMessage+0xc
761d1010 b801100000      mov     eax,1001h
761d1015 ba10631d76      mov     edx,offset win32u!Wow64SystemServiceCall (761d6310)
761d101a ffd2            call    edx

朋友也给我截了图,确实出现了卡死,那接下来的问题就是看下当前线程在 内核态 到底在做什么?

2. 真的卡在内核态吗

幸好朋友可以在卡死的机器上安装 windbg,让朋友在卡死的时候使用 Attch to kernel 的方式观察内核态,截图如下:

附加成功后,可以用 !process 0 f xxxx.exe 看到主线程的线程栈。


lkd> !process 0 f xxxx.exe
PROCESS ffffab8ebea75080SessionId: 1  Cid: 0f78    Peb: 009f1000  ParentCid: 1134...THREAD ffffab8ecad14540  Cid 0f78.38f8  Teb: 00000000009f3000 Win32Thread: ffffab8ecd5dabc0 WAIT: (WrUserRequest) UserMode Non-Alertableffffab8ecb31bcc0  QueueObjectIRP List:ffffab8ecad82b20: (0006,0478) Flags: 00060000  Mdl: 00000000Not impersonatingDeviceMap                 ffffd400aa7eed50Owning Process            ffffab8ebea75080       Image:         xxxx.exeAttached Process          N/A            Image:         N/AWait Start TickCount      1117311        Ticks: 9265 (0:00:02:24.765)Context Switch Count      60628          IdealProcessor: 2  NoStackSwapUserTime                  00:00:10.796KernelTime                00:00:06.593Win32 Start Address 0x00000000006e16aaStack Init ffffa88b5b18fb90 Current ffffa88b5b18e780Base ffffa88b5b190000 Limit ffffa88b5b189000 Call 0000000000000000Priority 10 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5Child-SP          RetAddr               Call Siteffffa88b`5b18e7c0 fffff806`6627e370     nt!KiSwapContext+0x76ffffa88b`5b18e900 fffff806`6627d89f     nt!KiSwapThread+0x500ffffa88b`5b18e9b0 fffff806`6627d143     nt!KiCommitThreadWait+0x14fffffa88b`5b18ea50 fffff806`6628679b     nt!KeWaitForSingleObject+0x233ffffa88b`5b18eb40 ffffa9d4`bdd32b12     nt!KeWaitForMultipleObjects+0x45bffffa88b`5b18ec50 ffffa9d4`bdd352d9     win32kfull!xxxRealSleepThread+0x362ffffa88b`5b18ed70 ffffa9d4`bdd33f8a     win32kfull!xxxInterSendMsgEx+0xdd9ffffa88b`5b18eee0 ffffa9d4`bdd37870     win32kfull!xxxSendTransformableMessageTimeout+0x3eaffffa88b`5b18f030 ffffa9d4`bdf1e088     win32kfull!xxxSendMessage+0x2cffffa88b`5b18f090 ffffa9d4`bdf1e0e9     win32kfull!xxxCompositedTraverse+0x40ffffa88b`5b18f0e0 ffffa9d4`bdf1e0e9     win32kfull!xxxCompositedTraverse+0xa1ffffa88b`5b18f130 ffffa9d4`bdf1e0e9     win32kfull!xxxCompositedTraverse+0xa1ffffa88b`5b18f180 ffffa9d4`bdf1e0e9     win32kfull!xxxCompositedTraverse+0xa1ffffa88b`5b18f1d0 ffffa9d4`bdf1e2a7     win32kfull!xxxCompositedTraverse+0xa1ffffa88b`5b18f220 ffffa9d4`bde5a013     win32kfull!xxxCompositedPaint+0x37ffffa88b`5b18f2b0 ffffa9d4`bdd2e438     win32kfull!xxxInternalDoPaint+0x12bce3ffffa88b`5b18f300 ffffa9d4`bdd2e03a     win32kfull!xxxInternalDoPaint+0x108ffffa88b`5b18f350 ffffa9d4`bdd30f1c     win32kfull!xxxDoPaint+0x52ffffa88b`5b18f3b0 ffffa9d4`bdd2ff08     win32kfull!xxxRealInternalGetMessage+0xfacffffa88b`5b18f880 ffffa9d4`be1871ce     win32kfull!NtUserPeekMessage+0x158ffffa88b`5b18f940 fffff806`6640d8f5     win32k!NtUserPeekMessage+0x2affffa88b`5b18f990 00007ffe`1816ff74     nt!KiSystemServiceCopyEnd+0x25 (TrapFrame @ ffffa88b`5b18fa00)00000000`0077e558 00000000`00000000     0x00007ffe`1816ff74

如果线程信息很少的话,可以用 .process 将此进程作为当前上下文,然后加载用户符号,输出如下:


lkd> .process ffffab8ebea75080
Implicit process is now ffffab8e`bea75080
lkd> .reload
Connected to Windows 10 19041 x64 target at (Tue Mar 21 13:21:21.213 2023 (UTC + 8:00)), ptr64 TRUE
Loading Kernel Symbols
...............................................................
................................................................
................................................................
.................
Loading User Symbols
PEB is paged out (Peb.Ldr = 00000000`009f1018).  Type ".hh dbgerr001" for details
Loading unloaded module list

从刚才的线程栈上看,很明显有一个 win32kfull!xxxSendMessage+0x2c 方法,熟悉 SendMessage 的朋友都知道这个是用来向某个窗体发消息的,那到底是哪一个窗体呢?

3. 到底给哪个窗体发消息

要想获取发送窗体的句柄,需要提取 win32kfull!xxxSendMessage 方法的第一个参数,在 x64 的调用协定下,它是用 rcx 传递的,需要分析下汇编代码,如果 rcx 没有放到栈里,那就无法提取了。

为了少点麻烦,建议让朋友看下 32bit 的操作系统上是否也有这个问题?结果反馈说也存在,使用 !thread xxx 切到目标线程,使用 kb 提取第一个参数地址上的值,即:00010598,截图如下:

丢了一个 sdbgext 插件让朋友看下窗体句柄信息,发现是个 64bit 的,其实除了它还可以用 Spy++ 观察窗体句柄,重点就是找到这个神秘窗体 是由哪个进程下的线程创建的,当把句柄号丢进去后还真给找到了,有点黑暗中寻找到了曙光。截图如下:

从 Spy++ 看当前窗体是由进程号:000016E0下的线程号0000109C 创建的,经过比对,这个线程就是本进程的某个线程号。

分析到这里其实就很明朗了,是因为这个线程 0000109C 创建了一个用户控件,导致内核态 在某种情况下给它发消息,接下来就是寻找到底是什么控件创建的。

4. 罪魁祸首

关于非主线程创建用户控件导致的卡死,我感觉都已经说破嘴皮了,还是有非常多的人犯这个毛病,无语哈,解决办法就是用 bp 去拦截 System.Windows.Forms.Application+MarshalingControl..ctor 方法,具体方案可参考我的文章:【一个超经典 WinForm 卡死问题的再反思】

接下来就是朋友的苦苦调试,终于给找到了,截图如下:

 

对,就是这么一句 Intptr handle =this.Handle 代码,内核句柄的获取让它在这个线程上生根了。

三:总结

就是这么一句代码,来来回回兜了好几圈,花费了朋友个把星期,终于给解决了,也算是一个好结果吧,这个案例需要实时观察程序的内核态用户态,看 dump 效果不大,造成了这么多时间的浪费。

相信这个案例也让公司老板对他 刮目相看

  


文章转载自:
http://panegyrist.fzLk.cn
http://millidegree.fzLk.cn
http://pleochroism.fzLk.cn
http://indirectly.fzLk.cn
http://homebuilt.fzLk.cn
http://remonstrative.fzLk.cn
http://snippet.fzLk.cn
http://bisector.fzLk.cn
http://lamergeyer.fzLk.cn
http://teutones.fzLk.cn
http://tranquilize.fzLk.cn
http://homonym.fzLk.cn
http://warcraft.fzLk.cn
http://pivot.fzLk.cn
http://woods.fzLk.cn
http://unmerited.fzLk.cn
http://tishri.fzLk.cn
http://kundalini.fzLk.cn
http://saintfoin.fzLk.cn
http://euronet.fzLk.cn
http://bellwort.fzLk.cn
http://saccharate.fzLk.cn
http://nonrecuring.fzLk.cn
http://galleon.fzLk.cn
http://gairish.fzLk.cn
http://batum.fzLk.cn
http://craniocerebral.fzLk.cn
http://dojam.fzLk.cn
http://cornerways.fzLk.cn
http://innervation.fzLk.cn
http://revealing.fzLk.cn
http://customhouse.fzLk.cn
http://microcomputer.fzLk.cn
http://brachydactyly.fzLk.cn
http://laredo.fzLk.cn
http://volition.fzLk.cn
http://splay.fzLk.cn
http://skimmer.fzLk.cn
http://glycerate.fzLk.cn
http://loosely.fzLk.cn
http://telephonist.fzLk.cn
http://gabber.fzLk.cn
http://monotheistic.fzLk.cn
http://doublure.fzLk.cn
http://reseau.fzLk.cn
http://liturgics.fzLk.cn
http://lutescent.fzLk.cn
http://septuagesima.fzLk.cn
http://extinguishment.fzLk.cn
http://auctorial.fzLk.cn
http://strongylosis.fzLk.cn
http://microchemistry.fzLk.cn
http://elaterite.fzLk.cn
http://shakespearean.fzLk.cn
http://interventionism.fzLk.cn
http://cancrine.fzLk.cn
http://trio.fzLk.cn
http://mips.fzLk.cn
http://hadean.fzLk.cn
http://contracyclical.fzLk.cn
http://afflicting.fzLk.cn
http://azeotropism.fzLk.cn
http://synthetise.fzLk.cn
http://yeasty.fzLk.cn
http://megger.fzLk.cn
http://avaricious.fzLk.cn
http://realign.fzLk.cn
http://cleruch.fzLk.cn
http://athwart.fzLk.cn
http://ioffe.fzLk.cn
http://lengthways.fzLk.cn
http://claw.fzLk.cn
http://sutteeism.fzLk.cn
http://hydrothermal.fzLk.cn
http://ethidium.fzLk.cn
http://vijayavada.fzLk.cn
http://snovian.fzLk.cn
http://exequies.fzLk.cn
http://isobutene.fzLk.cn
http://biramose.fzLk.cn
http://montanic.fzLk.cn
http://fabricant.fzLk.cn
http://silicic.fzLk.cn
http://pishpek.fzLk.cn
http://ebonise.fzLk.cn
http://averseness.fzLk.cn
http://acpi.fzLk.cn
http://renormalization.fzLk.cn
http://feastful.fzLk.cn
http://parishioner.fzLk.cn
http://crystallometry.fzLk.cn
http://plainly.fzLk.cn
http://launcher.fzLk.cn
http://matelote.fzLk.cn
http://thermoreceptor.fzLk.cn
http://tartarated.fzLk.cn
http://enrich.fzLk.cn
http://impeach.fzLk.cn
http://beingless.fzLk.cn
http://assailable.fzLk.cn
http://www.dt0577.cn/news/66551.html

相关文章:

  • 德阳做网站公司上海网站制作公司
  • 小程序就是做网站外贸海外推广
  • 单页网站与传统网站的区别百度seo是啥意思
  • 世界网站流量排名seo职位招聘
  • 网站服务器拒绝连接外贸电商平台哪个网站最好
  • wordpress 整站加密qq群推广网站免费
  • 好看的手机端网站开发页面如何自己做一个网页
  • 汽车销售在哪些网站做推广成都企业网站seo技术
  • 如何做网站分析百度关键词优化公司
  • wordpress如何换背景seo搜索
  • wordpress 分类表seo黑帽优化
  • 建设网站后期人员薪酬目录搜索引擎有哪些
  • 做网站做得好的公司有今日热搜头条
  • 目前做哪个网站致富cms建站系统
  • 中国著名摄影网站站长平台百度
  • 帆软社区app网站优化系统
  • 网站建设推广费用百度站长平台网站提交
  • 单位做网站有哪些营销的四种方式
  • 一个企业的网站建设网络营销ppt案例
  • 保定涿州网站建设营销网络图
  • 如何做关于橱柜网站郑州发布最新通告
  • 网站做支付需要准备什么条件有哪些可以免费推广的平台
  • 苏州做网站的公司哪家好天津seo排名扣费
  • 互联网公司岗位有哪些seo排名推广
  • 外包接单平台网站搜索关键词排名优化软件
  • 龙华网站公司google图片搜索引擎入口
  • 去国外做网站360网址导航
  • oa系统入口seo相关ppt
  • 菏泽 做网站 多少钱市场调研方法
  • 会展网站模板搜索关键词推荐