问题标签 [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.
c++ - 为什么类的字段是自动对象?
在我研究异常机制的过程中,我发现在堆栈展开时会调用对象字段的析构函数。让我明确解释一下:
所以,现在如果 Lock_ptr 的构造函数抛出异常,对象aa将被销毁;问题是“为什么”?我一直认为对象的文件不是通常的自动(本地)对象。它们是在构造函数初始化它们之前创建的。所以它们超出构造函数的范围后不能被销毁(否则它们会被销毁)构造函数完成了它的工作)
ios-simulator - iOS 项目可在模拟器中运行,但不能在 iPhone 5 上运行
我已经在 Xcode 6 中完成了我的项目。在模拟器上测试。一切正常。所以在我的硬件上安装了应用程序。(iPhone 5)但是看起来准备 segue 和 unwind to segue 方法没有被调用。由于我在这些方法中设置的属性保持为零。所以应用程序崩溃了。请帮忙。
c++ - 在共享库中使用 libunwind
我想提供一个通用调用堆栈函数作为库 (.so) 的一部分,使用libunwind
. 但是,与 .so 链接的可执行文件在我链接到 .so 后立即开始失败libunwind
。据我了解,我遇到的问题是libunwind
定义了与 GCC 运行时相同的符号,但实现似乎不兼容。
静态或动态链接libunwind
不会改变任何东西,我在抛出异常时_Unwind_Resume
(如果静态链接)会出现段错误,否则调用堆栈开始于__cxa_throw
(可能之前已经损坏。)
有趣的是,只有当我使用 GCC 和 Clang 时才会出现问题,一切正常。
是否可以libunwind
在共享库中使用?如果没有,是否有另一个库可以让我获得堆栈上函数的名称和指令指针偏移量?backtrace()
几乎足够好,但是backtrace_symbols()
做了太多的格式化,我必须先“取消解析”。
ios - Unwind Segue 没有执行 Segue
目前我有以下错误:
我正在尝试通过 Touch up Inside 对 RootViewController 进行 Segue,然后执行 SelectedIndex:1;
我在 optionsTabBarViewController 上有以下代码:
在 StoryBoard 上,我将 ViewController 与 Exit 链接在一起,这是图像:
这就是我在 ViewController 上调用 Segue 的方式:
不明白为什么它不执行 Segue 并给我下面显示的错误。
这是我的 NavigationController 层次结构:
ios - 展开时显示 TopBar NavigationController
目前我正在使用 Unwind 进入其路径的主视图。
这是我在 Sender ViewController 上的代码:
这是展开前的样子
这是从源视图控制器展开后的样子:
问题是我不明白为什么它没有显示 Green TopBar?与 TabBarController 有关吗?
这是我的路径 VC:
c++ - 确实存在什么样的堆栈展开库,有什么区别?
在尝试构建自己的非 GNU 跨平台 C++ 环境时,我面临一个事实,即我并不真正了解堆栈展开的基础知识。我搭建的环境如下:
libc++
← libc++abi
← libunwind
(或其他一些展开器)。
我发现它libc++abi
已经包含某种 libunwind,但不在 Linux 上使用它。根据我理解的评论,它是特殊的 libunwind: LLVM Stack Unwinder,仅支持 Darwin 和 ARM,但不支持 x86_64 - 这令人困惑。CPU架构如何影响堆栈展开过程?
我还知道以下堆栈展开器:
- glibc 内置。
- libc++abi LLVM libunwind。
- GNU libunwind(来自稀树草原)。
问题:
- 平台或 CPU 架构如何影响堆栈展开过程?
- 为什么要有许多堆放卷机——而不仅仅是一个?
- 确实存在什么样的开卷机,它们之间有什么区别?
对答案的期望:
我希望得到涵盖整个主题的答案,而不仅仅是每个问题的不同点。
c++ - longjmp 展开的 C/C++ 实现?
是否存在longjmp
函数“展开”的主要 C/C++ 实现,即它与自动存储对象__attribute__((__cleanup__(...)))
、POSIX 线程取消处理程序等的析构函数交互,而不仅仅是恢复由 保存的寄存器上下文setjmp
?我对具有此属性的 POSIX 实现的存在(或不存在)特别感兴趣,但 C/C++ 通常也很有趣。
对于赏金,我正在寻找符合 POSIX 或至少类似 POSIX 的系统,而不是已经提到的 Windows。
ios - 从任何来源到 IBAction Unwind 的来源进行 unwind segue
我正在从 View Controller 执行展开动作 segue,因此当按下它时,它将转到 Call history 示例:
通话记录 > 个人资料详情 > 通话(这样就可以了)
Search > Profile Detail > Calling (这种方式确实执行取消操作但不执行segue)
Segue 的名称称为 goToHistory 并使用
并且 ViewController 连接到 Exit 所以我可以调用上面的方法。
我调用 unwind 的方式如下:
具有展开 IBACTION 的 ViewController 是呼叫历史记录,但正如您所见,当从搜索 > 配置文件详细信息 > 呼叫到达它时不会执行对呼叫历史记录的 segue 但它确实执行了操作然后我执行呼叫历史记录 > 配置文件详细信息 >打电话
c++ - 抛出对局部变量有 const 引用的异常
在堆栈展开期间,异常中引用的局部变量会发生什么?考虑以下代码:
some_local_object会发生什么?它不应该在堆栈展开期间被销毁吗?使用它是否安全,如示例中提供的那样?
附加问题
正如已经回答的那样,此代码将导致未定义的行为。我的第二个问题是:
如果我既不允许传递对本地对象的引用也不应该尝试复制它,因为在极少数情况下它可能会导致 bad_alloc(我猜这就是为什么 gcc 标准库没有有意义的错误消息,即 map.at抛出什么()返回“map.at”)的异常,那么传递附加信息的好策略是什么?请注意,即使连接多个字符串,在构建错误消息期间理论上也可能导致 bad_alloc。IE:
multithreading - 抓狂!当 Rust 从 C FFI 调用时,没有产生线程
我正在为 Duktape JavaScript 解释器开发一个 Rust 包装器。在正常用例中,调用堆栈将如下所示:
- Rust:任意应用程序代码。
- Rust:我的库包装器。
- C: Duktape 口译员。
- Rust:我的 Rust 代码。
- 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
无需创建线程/任务开销即可进行模拟的方法吗?