我正在分析一组有缺陷的程序,经过一些测试,它们可能会以segfault终止。 segfault事件记录在 $("button").click(function() {
id = $(this).parent().parent().children('td.product_id').text();
price = $(this).parent().parent().children('td.price').text();
});
。
例如,以下代码段返回print(dtIris, topn = 60)
并将其记录。
/var/log/syslog
我的问题是如何抑制段错误,使 NOT 出现在系统日志中。我尝试Segmentation fault
来捕获以下脚本中的信号:
#!/bin/bash
./test
它返回:
trap
因此,它会捕获段错误,但段错误仍然记录。
#!/bin/bash
set -bm
trap "echo 'something happened'" {1..64}
./test
答案 0 :(得分:0)
您可以尝试将./test
更改为以下行:
. ./test
这将在同一个shell中执行./test
。
答案 1 :(得分:0)
我们可以用e来抑制系统范围内的日志消息。克。
echo 0 >/proc/sys/debug/exception-trace
- 另见
如果我们在ptrace()
控件下运行它,我们可以禁止单个进程的日志消息,就像在调试器中一样。这个程序就是这样做的:
exe.c
#include <sys/wait.h>
#include <sys/ptrace.h>
main(int argc, char *args[])
{
pid_t pid;
if (*++args)
if (pid = fork())
{
int status;
while (wait(&status) > 0)
{
if (!WIFSTOPPED(status))
return WIFSIGNALED(status) ? 128+WTERMSIG(status)
: WEXITSTATUS(status);
int signal = WSTOPSIG(status);
if (signal == SIGTRAP) signal = 0;
ptrace(PTRACE_CONT, pid, 0, signal);
}
perror("wait");
}
else
{
ptrace(PTRACE_TRACEME, 0, 0, 0);
execvp(*args, args);
perror(*args);
}
return 1;
}
在你的情况下,用buggy程序作为参数调用
exe ./test
- 然后exe
的退出状态通常是test
的退出状态,但如果test
被信号 n 终止(分段错误),它是128 + n 。
在我写完之后,我意识到我们也可以使用strace
来达到目的,e。克。
strace -enone ./test