繁体   English   中英

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

[英]How can I throw an unknown exception in c++?

我有一个类似于报告的问题:

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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM