the sx family of commands accept either name of exception/event, av, exception code or *.
the thing * catches unnamed exceptions. if want execute command when exception happens, explicitly named or not?
for instance,
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" * instructs debugger to:
- execute bla-bla-bla command on first chance access violation
- execute ku-ku-ku command on second chance access violation
- execute bla-bla-bla command on first chance division zero
- execute ku-ku-ku command on second chance division zero
- execute bla-bla-bla command on unnamed first chance exception
- execute ku-ku-ku command on unnamed second chance exception
but, there 2 dozens of named exception , if want these commands executed on each 1 of them seem expected repeat same sxe statement each of these exceptions, changing exception name.
is there better way it?
thanks.
edit1
here actual cdb script, use commands:
as adpdumpdir c:\logs\crash !adplusext.adpextstart adpdumpdir /c adpprocid !adplusext.adpprocid /c adphostcomputer !adplusext.adphostcomputer /c adptargetcomputer !adplusext.adptargetcomputer /c adpprocname !adplusext.adpprocname .logopen /t ${adpdumpdir}\${adpprocname}.log version al .symfix+ c:\users\markk\appdata\local\temp\symbolcache .sympath .reload exccode av 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} exccode asrt 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} exccode aph 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} exccode eh excname c++eh sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode clr excname clr sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode clrn excname clrnotification sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode dm 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} exccode gp 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} exccode ii excname illegalinstruction sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode ip excname inpageioerror sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode dz 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} exccode iov 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} exccode ch 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} exccode lsq 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} exccode isc 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} exccode 3c excname portdisconnected sxe -c "gn" -c2 @".dump /u /ma /c secondchance_${exccode}_${excname} ${adpdumpdir}\minidump_${adpprocname}_secondchance_${exccode}_${excname}_.dmp;gn" ${exccode} exccode svh 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} exccode sov 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} exccode vs 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} exccode vcpp 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 i looking ways make shorter , simpler, if possible.
as far know, there no nice solution, can use hack:
.foreach(code {sx}) {.catch{sxe -c "bla-bla-bla" -c2 "ku-ku-ku" ${code}}} where {sx} list named exception codes , settings (which skipped later). code name of variable. .foreach(...) {...} processes output single words. sxe ... ${code} performs expected command , .catch{...} ignores errors (i.e. skips unwanted tokens).
with pykd can write python script bit more straight-forward:
from pykd import * str = dbgcommand("sx") lines = str.split("\n") line in lines: if ("-" in line) , not("command:" in line): code = line.split("-")[0].strip() dbgcommand("sxe -c \"bla-bla-bla\" -c2 \"ku-ku-ku\" " + code)
Comments
Post a Comment