如何在c ++中抛出未知异常?

时间:2012-12-05 13:53:47

标签: c++ exception

我遇到类似于以下报道的问题:

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>

1 个答案:

答案 0 :(得分:2)

“第二次机会”意味着您可能正在处理结构化异常处理(Win32),而不是C ++异常。通过RaiseException()抛出SEH异常。它的第一个参数是一个异常代码,例如0xC0000005。显然,并非所有40亿个可能的值都有名称。任何没有名字的价值都是“未知”。