问题一:如果在main()中没有匹配的catch语句会发生什么?
如果在main()中没有匹配的catch语句会发生什么?
参考回答:
如果在main()中没有匹配的catch语句,异常会继续向上回溯栈帧,寻找更上层的catch语句。如果一直找不到匹配的catch语句,程序将会终止。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/642319
问题二:在g()函数中,为什么需要着陆场?
在g()函数中,为什么需要着陆场?
参考回答:
在g()函数中,需要着陆场是因为在函数f()抛出异常后,需要回溯到g()函数,并在此停留以析构在g()中创建的局部对象a,然后再继续向上回溯栈帧。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/642317
问题三:如何捕获异常?
如何捕获异常?
参考回答:
异常是通过catch语句来捕获的。在main()函数中,通过检查从下层函数传递上来的动作标识(例如,通过寄存器rdx传递),可以确定是否捕获到异常以及捕获到的是哪种类型的异常。然后,根据异常类型执行相应的catch语句块。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/642318
问题四:__cxa_throw()是如何回溯栈帧和找到着陆场的?
__cxa_throw()是如何回溯栈帧和找到着陆场的?
参考回答:
__cxa_throw()回溯栈帧和找到着陆场的过程依赖于编译时生成的.eh_frame和.gcc_except_table段。运行时,借助这两张表可以找到上层栈帧和着陆场的位置。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/642320
问题五:如果异常类型与所有的catch语句都不匹配会怎么办?
如果异常类型与所有的catch语句都不匹配会怎么办?
参考回答:
如果抛出的异常类型与所有的catch语句都不匹配,那么异常会继续向上回溯栈帧,直到找到匹配的catch语句或者程序因为没有合适的处理而终止。
关于本问题的更多回答可点击原文查看: