我遇到类似于以下报道的问题:
http://social.msdn.microsoft.com/Forums/lv/windbg/thread/52000403-db16-4f33-9b38-dae79d9ba038
由于文件路径
,Adplus无法为未知异常生成完整转储文件我们得到一个SecondChance _ * _ UnknownException,adplus尝试(并且失败)作为文件名的一部分。
我想尝试类似于链接中建议的更改,但我想测试adplus是否可以为我创建转储文件。
所以,问题是,“如何在c ++中抛出未知异常?”
更新:请参阅下面的MSalters评论,并展示如何创建未知异常
此外,为了将来参考,我正在添加我的adplus配置文件,该文件可以执行完全转储,并且文件名中没有星号问题。
<ADPlus Version='2'>
<KeyWords>
<KeyWord Name="MyActF">
.dump -u /ma ${AdpDumpDir}\FULLDUMP_FirstChance_UnknownException_${AdpProcName}_.dmp
</KeyWord>
<KeyWord Name="MyActS">
.dump -u /ma ${AdpDumpDir}\FULLDUMP_SecondChance_UnknownException_${AdpProcName}_.dmp
</KeyWord>
</KeyWords>
<Exceptions>
<Exception Code="epr">
<Actions1>Void</Actions1>
<Actions2>Void</Actions2>
</Exception>
<Exception Code="bpe">
<Actions1>FullDump</Actions1>
<Actions2>FullDump</Actions2>
</Exception>
<Exception Code="*">
<Actions1>Log;Stack;Void</Actions1>
<Actions2>Log;Stack;MyActS</Actions2>
<ReturnAction1>GN</ReturnAction1>
<ReturnAction2>GN</ReturnAction2>
</Exception>
</Exceptions>
</ADPlus>
一些注意事项:此文件不会在epr进程关闭时创建转储,它会在“bpe”上执行完全转储,并对“”转储进行特殊处理,因此adplus不会尝试创建文件名。我可能倾向于仅对第二次机会未知异常执行完全转储...在Actions1 for Exception Code =“”下可以根据您是要完全转储还是不转储来放置MyActF或Void。 / p>
答案 0 :(得分:2)
“第二次机会”意味着您可能正在处理结构化异常处理(Win32),而不是C ++异常。通过RaiseException()
抛出SEH异常。它的第一个参数是一个异常代码,例如0xC0000005
。显然,并非所有40亿个可能的值都有名称。任何没有名字的价值都是“未知”。