问题标签 [stack-unwinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
115 浏览

c++ - 为什么类的字段是自动对象?

在我研究异常机制的过程中,我发现在堆栈展开时会调用对象字段的析构函数。让我明确解释一下:

所以,现在如果 Lock_ptr 的构造函数抛出异常,对象aa将被销毁;问题是“为什么”?我一直认为对象的文件不是通常的自动(本地)对象。它们是在构造函数初始化它们之前创建的。所以它们超出构造函数的范围后不能被销毁(否则它们会被销毁)构造函数完成了它的工作)

0 投票
1 回答
55 浏览

ios-simulator - iOS 项目可在模拟器中运行,但不能在 iPhone 5 上运行

我已经在 Xcode 6 中完成了我的项目。在模拟器上测试。一切正常。所以在我的硬件上安装了应用程序。(iPhone 5)但是看起来准备 segue 和 unwind to segue 方法没有被调用。由于我在这些方法中设置的属性保持为零。所以应用程序崩溃了。请帮忙。

0 投票
0 回答
1356 浏览

c++ - 在共享库中使用 libunwind

我想提供一个通用调用堆栈函数作为库 (.so) 的一部分,使用libunwind. 但是,与 .so 链接的可执行文件在我链接到 .so 后立即开始失败libunwind。据我了解,我遇到的问题是libunwind定义了与 GCC 运行时相同的符号,但实现似乎不兼容。

静态或动态链接libunwind不会改变任何东西,我在抛出异常时_Unwind_Resume(如果静态链接)会出现段错误,否则调用堆栈开始于__cxa_throw(可能之前已经损坏。)

有趣的是,只有当我使用 GCC 和 Clang 时才会出现问题,一切正常。

是否可以libunwind在共享库中使用?如果没有,是否有另一个库可以让我获得堆栈上函数的名称和指令指针偏移量?backtrace()几乎足够好,但是backtrace_symbols()做了太多的格式化,我必须先“取消解析”。

0 投票
0 回答
225 浏览

ios - Unwind Segue 没有执行 Segue

目前我有以下错误:

我正在尝试通过 Touch up Inside 对 RootViewController 进行 Segue,然后执行 SelectedIndex:1;

我在 optionsTabBarViewController 上有以下代码:

在 StoryBoard 上,我将 ViewController 与 Exit 链接在一起,这是图像: 在此处输入图像描述在此处输入图像描述

这就是我在 ViewController 上调用 Segue 的方式:

不明白为什么它不执行 Segue 并给我下面显示的错误。

这是我的 NavigationController 层次结构: 在此处输入图像描述

0 投票
1 回答
49 浏览

ios - 展开时显示 TopBar NavigationController

目前我正在使用 Unwind 进入其路径的主视图。

这是我在 Sender ViewController 上的代码:

这是展开前的样子

在此处输入图像描述

这是从源视图控制器展开后的样子:

在此处输入图像描述

问题是我不明白为什么它没有显示 Green TopBar?与 TabBarController 有关吗?

这是我的路径 VC:

在此处输入图像描述

0 投票
1 回答
1945 浏览

c++ - 确实存在什么样的堆栈展开库,有什么区别?

在尝试构建自己的非 GNU 跨平台 C++ 环境时,我面临一个事实,即我并不真正了解堆栈展开的基础知识。我搭建的环境如下:

libc++libc++abilibunwind(或其他一些展开器)。

我发现它libc++abi已经包含某种 libunwind,但不在 Linux 上使用它。根据我理解的评论,它是特殊的 libunwind: LLVM Stack Unwinder,仅支持 Darwin 和 ARM,但不支持 x86_64 - 这令人困惑。CPU架构如何影响堆栈展开过程?

我还知道以下堆栈展开器:

  1. glibc 内置。
  2. libc++abi LLVM libunwind。
  3. GNU libunwind(来自稀树草原)。

问题:

  1. 平台或 CPU 架构如何影响堆栈展开过程?
  2. 为什么要有许多堆放卷机——而不仅仅是一个?
  3. 确实存在什么样的开卷机,它们之间有什么区别?

对答案的期望:

我希望得到涵盖整个主题的答案,而不仅仅是每个问题的不同点。

0 投票
2 回答
2959 浏览

c++ - longjmp 展开的 C/C++ 实现?

是否存在longjmp函数“展开”的主要 C/C++ 实现,即它与自动存储对象__attribute__((__cleanup__(...)))、POSIX 线程取消处理程序等的析构函数交互,而不仅仅是恢复由 保存的寄存器上下文setjmp?我对具有此属性的 POSIX 实现的存在(或不存在)特别感兴趣,但 C/C++ 通常也很有趣。

对于赏金,我正在寻找符合 POSIX 或至少类似 POSIX 的系统,而不是已经提到的 Windows。

0 投票
0 回答
61 浏览

ios - 从任何来源到 IBAction Unwind 的来源进行 unwind segue

我正在从 View Controller 执行展开动作 segue,因此当按下它时,它将转到 Call history 示例:

通话记录 > 个人资料详情 > 通话(这样就可以了)

Search > Profile Detail > Calling (这种方式确实执行取消操作但不执行segue)

Segue 的名称称为 goToHistory 并使用

并且 ViewController 连接到 Exit 所以我可以调用上面的方法。

我调用 unwind 的方式如下:

在此处输入图像描述

具有展开 IBACTION 的 ViewController 是呼叫历史记录,但正如您所见,当从搜索 > 配置文件详细信息 > 呼叫到达它时不会执行对呼叫历史记录的 segue 但它确实执行了操作然后我执行呼叫历史记录 > 配置文件详细信息 >打电话

0 投票
2 回答
668 浏览

c++ - 抛出对局部变量有 const 引用的异常

在堆栈展开期间,异常中引用的局部变量会发生什么?考虑以下代码:

some_local_object会发生什么?它不应该在堆栈展开期间被销毁吗?使用它是否安全,如示例中提供的那样?

附加问题

正如已经回答的那样,此代码将导致未定义的行为。我的第二个问题是:

如果我既不允许传递对本地对象的引用也不应该尝试复制它,因为在极少数情况下它可能会导致 bad_alloc(我猜这就是为什么 gcc 标准库没有有意义的错误消息,即 map.at抛出什么()返回“map.at”)的异常,那么传递附加信息的好策略是什么?请注意,即使连接多个字符串,在构建错误消息期间理论上也可能导致 bad_alloc。IE:

0 投票
2 回答
2917 浏览

multithreading - 抓狂!当 Rust 从 C FFI 调用时,没有产生线程

我正在为 Duktape JavaScript 解释器开发一个 Rust 包装器。在正常用例中,调用堆栈将如下所示:

  1. Rust:任意应用程序代码。
  2. Rust:我的库包装器。
  3. C: Duktape 口译员。
  4. Rust:我的 Rust 代码。
  5. Rust:应用程序代码中的任意回调。

如果 (5) 调用会发生什么panic!?根据 IRC 上的各种 Rust 开发人员的说法,尝试panic!从像 (3) 这样的非 Rust 调用框架内部可能会导致未定义的行为。

但是根据 Rust 文档,捕获 a 的唯一方法panic!是 using std::task::try,它会产生一个额外的线程。除了其他限制外,还有rustrt::unwind::try, 它不能在单个线程中嵌套两次。

Benjamin Herr 提出的一种解决方案是,如果 (5) 中的代码出现恐慌,则中止该过程。我已经将他的解决方案打包为abort_on_panic,并且它似乎可以工作,对于“工作”的价值,包括“使整个程序崩溃,但至少不会巧妙地破坏事物”:

但是,是一种std::task::try无需创建线程/任务开销即可进行模拟的方法吗?