问题标签 [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++ - 为什么异常时不调用析构函数?
我希望A::~A()
在这个程序中被调用,但它不是:
但是,如果我将最后一行更改为
然后A::~A()
被调用。
我正在使用 Visual Studio 2005 中的“Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86”进行编译。命令行为cl /EHa my.cpp
.
编译器是否像往常一样正确?标准在这个问题上怎么说?
c - HP-UX 和 Linux 上的堆栈展开
我需要在某些点获取我的 C 应用程序的堆栈信息。我已经阅读了文档并搜索了网络,但仍然无法弄清楚我该怎么做。你能指出一个简单的过程解释吗?或者,甚至更好的是堆栈展开的示例。我需要它用于 HP-UX (Itanium) 和 Linux。
c++ - 离开 c++ 函数时程序崩溃......你认为它是什么?
我有一个 c++ 代码,我使用 MSC9 来编译它。它一直在随机崩溃。例如,如果使用 `` 从 Perl 调用它会崩溃,但从命令行或 Ultimate++ 调用它不会崩溃。
我的意思是从 perl 中调用它,例如。f.exe arg1 arg2 arg3
堆栈跟踪没有显示太多。逐行跟踪程序证明程序在返回时最后失败...
所以就是这样
我猜堆栈已损坏,堆栈展开后,它崩溃了..
什么会导致它?该程序使用 pcre、stl 和迭代器。迭代器可以破坏堆栈吗?你会如何捕捉到这样的错误?
它可能是编译器错误吗?
注意:调试版不会崩溃,只有发布版...
该错误似乎与此 pvector 类有关。
我有一个类似于这样的结构:
它似乎失败了,因为这一行:
我认为问题出在下面的类... std::copy 在 pvector operator=(const pvector &pv) 中是正确的,对吗?
pvector 是一个 perl 兼容的向量...它的索引可以大于向量的分配大小。
更新 1:我收到了作业中存在泄漏的建议。我改变了分配......现在看起来是这样的:
注意:通过将 & 添加到返回类型,崩溃仍然存在。但是,删除泄漏后,添加 delete [] m_rgArray; ,程序不再崩溃。我不明白。据我所知,泄漏不会导致崩溃。所以问题似乎解决了(?)。问号表示我的惊讶。Update2:不,问题又回来了。它只是消失了一段时间。Update3:我想我已经找到了。我使用了来自 Microsoft 调试工具的实用程序 gflags.exe 和 windbg.exe 来查找确切位置。我使用 gflags.exe /p /enable myprog.exe /full 来打开堆错误的异常。目前,我认为该错误是由 FindClose(handle); 引起的。其中句柄是一个随机值,未初始化。
旧版:
c - 指针问题
好的,我经历了 2 层函数 fun1 调用 func2 调用 func3 。我基本上使用 int *ptr 一直向下传递一个指针,在调用堆栈的最低“级别”我还有另一个函数,它为 int 数组动态分配内存。在顶层(func1 级别),我总是为传递的指针返回 null。我已经追溯到 func3 并且分配的内存正在填充值,但是随着调用堆栈展开 func3 -> func2 突然指针就消失了(0x0000_0000)?我在func3级别不明白我基本上说ptr = allocate_ptr_array,但是从那个返回它变成NULL!即使我没有释放内存,这到底是怎么回事?我知道我的问题令人困惑。我已经在调试器中看到了这种情况
c++ - 异常处理
我听说人们说异常处理有点昂贵,因为堆栈展开。
我没有得到任何东西,无论我抛出异常以及是否使用“return”,都会发生堆栈展开。那么区别在哪里呢?
例如,如果我遇到无法处理的内存问题 - 唯一的选择是停止该功能,直到我到达应该处理或通知问题的区域。那么我抛出异常的其他选择是什么?
我可以使用“return”而不是抛出异常,但它是一样的。我知道堆栈展开甚至可以返回六个堆栈,但是检查返回值和“返回”结合起来。
欢迎解释。
c# - .Net - 什么是“放松”?
在回答这个问题时,我注意到在处理异常时尝试移动“光标”时出现以下对话框:
无法将下一条语句设置为此位置。展开调用堆栈的尝试失败。
在以下情况下无法展开:
- 调试是通过即时调试开始的。
- 放松正在进行中
- 已引发 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。
究竟什么是放松?
assembly - Gnu Assembler (GAS) 中的 CFI 指令有什么用途?
每行之后似乎都有一个 .CFI 指令,并且这些示例的种类繁多.cfi_startproc
,.cfi_endproc
等等。 更多here。
我没有明白这些的目的。
java - 堆栈展开问题上的 Java 和 C++
据我所知,如果发生未捕获的异常,C++ 会立即销毁局部变量,Java 释放引用并将其余部分留给垃圾收集器。
这是正确的吗?在这个问题上,Java 和 C++ 到底有什么区别?换句话说,就堆栈展开问题而言,这两种语言中的哪一种被认为更好?:)
c++ - 在 C++ 中正常调用块退出时如何破坏局部变量?
C++ 自动以相反的顺序调用块中所有局部变量的析构函数,无论该块是正常退出(控制失败)还是抛出异常。
看起来术语堆栈展开仅适用于后者。关于销毁局部变量,如何调用前一个进程(块的正常退出)?
c++ - 停止调试时堆栈是否展开?
只是好奇我的析构函数是否被调用。
(特别是对于 Visual Studio,当您点击红色停止按钮时)