c++ - 在有和没有 TUI 的情况下,从析构函数中抛出的行为会有所不同
问题描述
我已经修改了以下有效 C++ 项目 8:防止异常离开析构函数,以便没有两个异常传播,因此这里不会出现崩溃/UD:
#include <iostream>
class Bad
{
public:
~Bad()
{
std::cout << "Throw in ~Bad()." << std::endl;
throw 1;
}
};
int main()
{
try
{
Bad bad;
}
catch(...)
{
std::cout << "Print This" << std::endl;
}
}
预期和实际输出:
Throw in ~Bad().
Print This
运行 gdb 也会给出相同的行为。但是通过 gdb TUI 运行会使程序在throw 1
这是可重现的:
g++ --version
g++ (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
问题:无论我是通过 gdb 还是通过 gdb TUI 运行,打包到二进制文件中的机器指令都是相同的,这是否意味着 TUI 解释指令的方式与 gdb 解释的方式不同?
同样,在过去,当可执行文件通过 gdb 运行并直接以 ./a.out 运行时,我发现了不同的行为,我无法理解同一个可执行文件如何仅通过我们运行它的方式给出不同的结果
注意:在 g++ 4.8.5 上运行时同样不可重现。
解决方案
推荐阅读
- aws-codebuild - 创建 AWS Codebuild Repository 时出现“未找到存储库或权限被拒绝”
- java - 使用 HashMap 中的列和值创建 CSV 文件
- javascript - 如何使用 axios create 创建 Promise 实例
- c++ - Valgrind OpenMPI
- sql-server - 从日期字段更新日期时间字段会在 SQL Server 中引发错误
- javascript - 屏幕上未显示的对象和按键不工作(Flappy Bird Code Challenge)
- c# - 在 C# 中的对象列表中打印出 1 个对象
- sql - 按其他列值获取列中每个唯一值的前 x% 行
- c - C - 如何检查矩阵中单元格的至少一个邻居是否尊重谓词?
- terminal - git rebase x 运行别名