gpt4 book ai didi

c - SIGSEGV 恢复?

转载 作者:行者123 更新时间:2023-11-30 14:23:32 24 4
gpt4 key购买 nike

我有一些 SSE 程序,可以将循环中的内存归零,当指针未对齐时,它会引发 SIGSEGV进入我的处理程序。我可以在此类处理程序中获取更多信息吗例行公事,现在我不知道它是在哪里完成的,我也可以吗以某种可预测的方式使用react?当我选择忽略它在我看来它应该回去因为它在循环中再次引发 SIGSEGV,(得到这样的行为当我忽略它时除以零,它就会继续进一步)但它在这里不起作用,但遗憾的是忽略后崩溃。我可以在这里做一些更详细的恢复吗?

编辑 - 添加

在我的signal.h中(一些非常旧的win32编译器,但我使用它) 我有这样的东西

    /* _SIGCONTEXT contains exception info for WIN32 exceptions that were caught
and turned into signals. There will always be three 32-bit parameters
passed to the user's signal handler. Unused parameters will be 0. The
_PSIGCONTEXT parameter will always be the last (third) parameter.
*/

typedef struct
{
struct _EXCEPTION_RECORD * _pexecptionrecord; /* defined in WINNT.H */
struct _CONTEXT * _pcontext; /* defined in WINNT.H */
unsigned long _result; /* return value for the SEH */
} _SIGCONTEXT, *_PSIGCONTEXT;

typedef int sig_atomic_t; /* Atomic entity type (ANSI) */

typedef void (*_CatcherPTR)(int);

#define SIG_DFL ((_CatcherPTR)0) /* Default action */
#define SIG_IGN ((_CatcherPTR)1) /* Ignore action */
#define SIG_ERR ((_CatcherPTR)-1) /* Error return */

//////////////////////////////////
//skipped #define SIGABRT 22
// #define SIGFPE 8 .... constants block here

int raise(int __sig);

void (*signal(int __sig, void (*__func)(int) )) (int);

信号提升对我来说是理解的,但如何获取 SIGCONTEXT 的数据或使用“捕手”?

最佳答案

虽然在某些情况下,某些操作系统可以捕获并处理 SIGSEGV、SIGBUS、SIGILL 和 SIGFPE,但除了崩溃之外,做任何事情都是一个坏主意。它们表明您的程序中存在需要修复的错误,而不是您只是将其隐藏起来的错误。

但是,如果你真的喜欢搬起石头砸自己的脚,留下可怕的无法调试和无法维护的困惑,让其他人不得不在你之后清理,同时诅咒你和你的祖先,同时希望巫毒有效,请看一下 sigaction 的文档() 以及如何 siginfo_t.它们至少包含您需要的某些部分。

关于c - SIGSEGV 恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12796380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com