2011-04-29 25 views
0

sx系列命令接受異常/事件的名稱,如av,異常代碼或*。如何在一個命令中禁用cdb中的顯式命名異常?

事情是*捕獲所有未命名的例外。如果我想在發生任何異常時執行命令,無論是明確命名還是不命名?

例如,

sxe -c "bla-bla-bla" -c2 "ku-ku-ku" av 
sxe -c "bla-bla-bla" -c2 "ku-ku-ku" dz 
sxe -c "bla-bla-bla" -c2 "ku-ku-ku" * 

指示調試器:

  • 上的第一次機會訪問衝突執行喇嘛喇嘛喇嘛命令
  • 執行對KU-KU-區命令第二次機會訪問衝突
  • 執行bla-bla-bla指令第一次機會除零
  • 在第二次機會司執行く區區命令由零
  • 上任何未命名的第一次機會異常執行BLA-BLA-BLA命令
  • 上的任何未命名的第二次機會異常執行く區區命令

但是,大約有兩十個命名的異常,如果我希望這些命令在其中的每一個上執行,我似乎都希望爲這些異常重複相同的sxe語句,只更改異常名稱。

有沒有更好的方法來做到這一點?

謝謝。

EDIT1

下面是實際的CDB腳本,在這裏我使用的命令:

as AdpDumpDir C:\Logs\Crash 
!adplusext.adpextstart AdpDumpDir 
as /c AdpProcID !adplusext.adpprocid 
as /c AdpHostComputer !adplusext.adphostcomputer 
as /c AdpTargetComputer !adplusext.adptargetcomputer 
as /c AdpProcName !adplusext.adpprocname 
.logopen /t ${AdpDumpDir}\${AdpProcName}.log 
version 
al 
.symfix+ C:\Users\markk\AppData\Local\Temp\SymbolCache 
.sympath 
.reload 
as ExcCode av 
as ExcName AccessViolation 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode asrt 
as ExcName AssertionFailure 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode aph 
as ExcName ApplicationHang 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode eh 
as ExcName C++EH 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode clr 
as ExcName CLR 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode clrn 
as ExcName CLRNotification 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode dm 
as ExcName DataMisaligned 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode gp 
as ExcName GuardPageViolation 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode ii 
as ExcName IllegalInstruction 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode ip 
as ExcName InPageIOError 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode dz 
as ExcName DivideByZero 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode iov 
as ExcName IntegerOverflow 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode ch 
as ExcName InvalidHandle 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode lsq 
as ExcName InvalidLockSequence 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode isc 
as ExcName InvalidSystemCall 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode 3c 
as ExcName PortDisconnected 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode svh 
as ExcName ServiceHang 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode sov 
as ExcName StackOverflow 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode vs 
as ExcName VerifierStop 
sxe -c @".dump /u /ma /c FirstChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_FirstChance_${ExcCode}_${ExcName}_.dmp;GN" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
as ExcCode vcpp 
as ExcName VisualC++ 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance_${ExcCode}_${ExcName} ${AdpDumpDir}\MINIDUMP_${AdpProcName}_SecondChance_${ExcCode}_${ExcName}_.dmp;GN" ${ExcCode} 
sxi bpe 
sxi wob 
sxi e06d7363 
sxi e0434352 
sxe -c "gn" -c2 @".dump /u /ma /c SecondChance ${AdpDumpDir}\MINIDUMP_SecondChance_${AdpProcName}_.dmp;GN" * 
sx 
g 
.logclose 
q 

我正在尋找辦法讓它更短,更簡單,如果可能的話。

回答

1

據我所知,也沒有很好的解決方案,但你可以使用這個技巧:

.foreach(code {sx}) {.catch{sxe -c "bla-bla-bla" -c2 "ku-ku-ku" ${code}}} 

其中{sx}列表中的所有指定的異常代碼及其設置(將在後面跳過)。 code只是一個變量的名稱。 .foreach(...) {...}將輸出處理爲單個單詞。 sxe ... ${code}執行期望的命令並且.catch{...}忽略所有錯誤(即跳過不需要的令牌)。

隨着PyKD你可以寫一個Python腳本,做多一點直截了當:

from pykd import * 

str = dbgCommand("sx") 
lines = str.split("\n") 
for line in lines: 
    if ("-" in line) and not("Command:" in line): 
     code = line.split("-")[0].strip() 
     dbgCommand("sxe -c \"bla-bla-bla\" -c2 \"ku-ku-ku\" " + code) 
+0

我以前用PyKD經驗是不成功的 - 它失敗的WinDbg 64位工作。試圖使用它會導致調試器在沒有任何通知的情況下被殺死。 – mark 2015-08-18 13:34:43