longjmp

    1热度

    2回答

    我刚刚开始阅读关于使用setjmp(jmp_buf)和longjmp(jmp_buf,int)在c中进行异常处理的this article。所以我基本上构建了使用xRecord类型的局部变量并将其链接到列表的链接列表。 (例2)它工作得很好。但在示例3中,这些步骤汇总为宏(XTRY和XEND)。什么最让我恼火的是,例如2的实际switch语句只是在3, “消失” 例2: #define DIVID

    5热度

    3回答

    我一直在试图追踪我的代码(使用setjmp)中的间歇性崩溃错误,并将其缩小为:与/ O2编译时出现,与/ O2/Oy一起消失 - ,即只显示与省略帧指针。 http://msdn.microsoft.com/en-us/library/2kxx5t2c(v=vs.80).aspx建议setjmp需要一个帧指针。因此: 看来,当使用的setjmp一个程序与/ O2编译时,Visual C++默默生成

    2热度

    1回答

    我刚刚阅读了Leon Timmermans的文章What you should know about signal based timeouts,我想知道它如何适用于Sys::SigAction::timeout_call()。 1)首先,看起来timeout_call()使用longjmp和不安全的信号,因此CERT Secure Coding rule SIG32-C是适用的。 2)如果被超时

    2热度

    1回答

    问题是 - 我必须用setjmp和longjmp实现我自己的退出(状态)。也许有人可以提供一些指针?

    0热度

    1回答

    我在eclipse中使用c编写程序。我需要使用GDB逐步调试它。然而,在longjmp命令(当我尝试保存堆栈的上下文)时,GDB在eclipse中崩溃(因为那里有断点?)有没有办法解决这个问题?我在过去的六个小时里搜索了互联网,似乎无法找到解决方案。这里是它崩溃的代码行 if(setjmp(p->jbContext) == 0) longjmp(context_buf,1); 我会非

    0热度

    3回答

    我正在使用非本地跳转(setjmp,longjmp)。我想知道这是否会成为演出的问题。 setjmp保存所有的堆栈,或只是一些指针? 谢谢。

    1热度

    2回答

    我有这个学校项目,它是关于使用setjmp和longjmp做不精确的计算。程序启动一个定时器,它将发出信号处理程序的信号。 在计时器到期之前,有一些迭代计算(对于演示目的而言,只是一个无用的循环)。在这个循环的开始处有一个setjmp调用,并且在信号处理程序中有一个longjmp调用。这基本上强制循环停止计算,并在调用longjmp的地方运行信号处理程序。 我遇到的问题是,无论何时计算部分很短,我

    2热度

    1回答

    为什么setjmp不保存堆栈? 考虑下面的代码: #include <iostream> jmp_buf Buf; jmp_buf Buf2; void MyFunction() { for(int i = 0; i < 5; i++) { std::cout << i << std::endl; if(!setjmp(Buf))

    5热度

    3回答

    我想在C程序中使用setjmp和longjmp,该程序链接到使用C++实现的库(但具有C API)。 C++代码确实做动态内存分配,并且指针通过API传递,但只要代码的C端正确管理那些(不透明)对象,在使用longjmp时不应该有任何混乱,对? 我知道在C++代码中使用这些函数并不安全,但是应该在C代码中安全吗?

    6热度

    1回答

    我正在浏览各种setjmp和longjmp实现的源代码,并注意到并非所有CPU寄存器都保存在jmp_buf结构中。在回顾AMD64 ABI后,我注意到只有被保存的寄存器被保存。 我不明白当只有一些寄存器被保存时如何完全恢复功能状态。肯定的是,未保存的寄存器必须一遍又一遍地被破坏,直到我稍后致电longjmp? 然而,一切都很完美,所以肯定有一些我不明白的东西。我希望有人能够对此有所了解。 谢谢!