0

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

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 下,异常代码 = " " 可以放置 MyActF 或 Void,具体取决于您是否想要完全转储或不进行转储。

4

1 回答 1

3

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

于 2012-12-05T14:52:59.827 回答