Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: 悬崖遛马   发起时间: 2015-01-23 14:02 下午   回复: 2

Print Search
帖子排序:    
   2015-01-23, 14:02 下午
Levwz 离线,最后访问时间: 2012/7/24 13:20:47 悬崖遛马

发帖数前25位
注册: 2012-07-24
发 贴: 30
Crying [:'(] 如何在surface上面开启内核调试选项呢
Reply Quote
雷老师以及各位大侠,
 
    最近在替换项目中的一个属性控件,功能差不多了,桌面上运行也没有大的问题, 拿到surface上面测试时发现某种case下程序挂死。

    首先从树上进行操作后会呼叫出一个窗体(MDI),进行操作后会从该窗体唤起另一个进程。这个唤起新进程的动作时而就会挂死。

    经过反复测试,发现如果使用鼠标以及触摸屏操作均没有问题,只是如果使用surface的触摸笔操作时就会出现问题。

    抓取dump发现主程序hang在
   

     0018e6f8 7505ea7f 00000002 0018e8a4 00000001 ntdll_77570000!ZwWaitForMultipleObjects+0xc (FPO: [5,0,0])
      184 0018e87c 7520c2a0 0018e854 0018e8a4 00000000 KERNELBASE!WaitForMultipleObjectsEx+0xdc (FPO: [SEH])
       58 0018e8d4 75e3c1db 00000000 0018e92c 000003e8 user32!MsgWaitForMultipleObjectsEx+0x159 (FPO: [Non-Fpo])
       38 0018e90c 75e3b438 0018e92c 00000001 0018e930 combase!CCliModalLoop::BlockFn+0x101 (FPO: [Non-Fpo]) (CONV: thiscall) [d:\blue_gdr\com\combase\dcomrem\callctrl.cxx @ 1571]
       28 0018e934 75f04e2f ffffffff 0065716c 0018ebdc combase!ClassicSTAThreadDispatchCrossApartmentCall+0x133 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\dcomrem\chancont.cxx @ 276]
      150 0018ea84 75e3c6ac 006bfd34 0018ebdc 0018ebc4 combase!CRpcChannelBuffer::SendReceive2+0x631 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\dcomrem\channelb.cxx @ 4796]
       c0 0018eb44 75e03b8f 006bfd34 0018ebdc 0018ebc4 combase!ClassicSTAThreadSendReceive+0x209 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\dcomrem\callctrl.cxx @ 696]
       5c 0018eba0 75f014a5 006bfd34 0018ebdc 0018ebc4 combase!CCtxComChnl::SendReceive+0xf9 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\dcomrem\ctxchnl.cxx @ 790]
       18 0018ebb8 75d5470c 0069e854 0018ec08 75dcef05 combase!NdrExtpProxySendReceive+0x42 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\ndr\ndrole\proxy.cxx @ 2017]
        c 0018ebc4 75dcef05 682c951a 0018f0d4 0018f038 rpcrt4!NdrpProxySendReceive+0xe (FPO: [0,0,0])
      440 0018f004 75f01a1e 02256448 02255316 0018f038 rpcrt4!NdrClientCall2+0x2d6 (FPO: [SEH])
       1c 0018f020 75e03a83 0000001c 0000000e 0018f0f0 combase!ObjectStublessClient+0x6b (FPO: [Non-Fpo]) (CONV: stdcall) [d:\blue_gdr\com\combase\ndr\ndrole\i386\stblsclt.cxx @ 215]
       10 0018f030 051cae1c 0069e854 00000000 073fdbb8 combase!ObjectStubless+0xf [d:\blue_gdr\com\combase\ndr\ndrole\i386\stubless.asm @ 171]      

      网上找相应案例可能是由于新的控件为STA模型,而没有进行pumpmessage导致新的弹出窗体消息无法被处理,最终导致挂死。

那么问题来了,
     1. surface pen 与普通手指触摸不同,肯定有自己的驱动,我需要调试下我呼叫新程序时发生了什么?
     2. 在surface上安装windbg,尝试启用内核调试选项失败,被告知由于“该值受安全引导策略保护,无法进行修改或删除",所以 bcdedit -debug on 运行失败
    
     请问,如何才能在surfaces上进行调试呢?

     还有请各位帮忙分析下以上问题可能出现在什么地方,

不胜感激

IP 地址: 已记录   报告
   2015-01-23, 16:14 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 如何在surface上面开启内核调试选项呢
Reply Quote
感觉这样的问题,调试用户态就够了,贴出来的栈回溯(0号线程的??)不完整,看不出RPC的发起者;建议还是仔细分析用户态的dump
IP 地址: 已记录   报告
   2015-01-26, 09:41 上午
Levwz 离线,最后访问时间: 2012/7/24 13:20:47 悬崖遛马

发帖数前25位
注册: 2012-07-24
发 贴: 30
Re: 如何在surface上面开启内核调试选项呢
Reply Quote
当时因为只有用surface的笔操作的时候才有问题,用手触摸屏幕和鼠标操作都正常

回头多看看用户态栈,

多谢雷老师

IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 如何在surface上面开启内核调试选项呢

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.