重置WARN_ONCE

简介: 重置WARN_ONCE

参考

当WARN_ONCE或者WARN_ON_ONCE被第一次触发时,会输出调用栈,后面就不会了。可以使用下面的命令重置,这样再次触发时,还可以输出一次调用栈:

echo 1 > /sys/kernel/debug/clear_warn_once

相关的实现在kernel\panic.c:

/* Support resetting WARN*_ONCE state */
static int clear_warn_once_set(void *data, u64 val)
{
  generic_bug_clear_once();
  memset(__start_once, 0, __end_once - __start_once);
  return 0;
}
DEFINE_DEBUGFS_ATTRIBUTE(clear_warn_once_fops, NULL, clear_warn_once_set,
       "%lld\n");

其中generic_bug_clear_once在lib\bug.c中:

static void clear_once_table(struct bug_entry *start, struct bug_entry *end)
{
  struct bug_entry *bug;
  for (bug = start; bug < end; bug++)
    bug->flags &= ~BUGFLAG_DONE;
}
void generic_bug_clear_once(void)
{
#ifdef CONFIG_MODULES
  struct module *mod;
  rcu_read_lock_sched();
  list_for_each_entry_rcu(mod, &module_bug_list, bug_list)
    clear_once_table(mod->bug_table,
         mod->bug_table + mod->num_bugs);
  rcu_read_unlock_sched();
#endif
  clear_once_table(__start___bug_table, __stop___bug_table);
}

在clear_warn_once_set中做了两件事:

  1. 调用generic_bug_clear_once把模块以及内核自己的所有的bug_entry->flags成员的BUGFLAG_DONE位清除
  2. 将内核的*(.data.once)段的内容清0

也就是说,WARN_ON_ONCE或者WARN_ONCE会利用上面两种数据段的内容来判断是否需要输出上下文信息,这个在后面的文章中再分析。

相关文章
|
7月前
|
存储 自然语言处理 IDE
|
5月前
|
数据库连接
系统日志使用问题之如何区分WARN和ERROR级别的日志
系统日志使用问题之如何区分WARN和ERROR级别的日志
|
7月前
|
Java 数据库
log4j:WARN Please initialize the log4j system prop
log4j:WARN Please initialize the log4j system prop
63 1
|
Java 项目管理 Spring
【log4j异常】Spring boot项目启动报警告信息,log4j:WARN Please initialize the log4j system properly.
【log4j异常】Spring boot项目启动报警告信息,log4j:WARN Please initialize the log4j system properly.
451 0
|
Java 程序员
【日志级别】log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL)
【日志级别】log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL)
2100 0
|
关系型数据库 MySQL
把log_error_verbosity设置为3,调试连接问题ERROR 2003 (HY000):ERROR 1045 (28000):
mysql 8里面使用global log_error_verbosity控制日志记录的详细程度
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
【问题记录】警告:warning.warn(‘Downloading:{}‘.format(url),DownloadWarning)
|
Java
Log4j中禁止打印某一类日志
目前我们在项目中使用的日志管理大多都是 Log4j ,它确实让我们对日志的管理更加的方便,快捷
637 0
Log4j中禁止打印某一类日志
|
Web App开发 监控 Java
log4j WARN 的解决办法
log4j 是什么 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
1860 0
|
Java
@Log4j找不到log
IntelliJ安装lombok插件可以解决以上问题 步骤: 这里写图片描述 搜索Plugins 点击下方的Browse repositories.. 这里写图片描述 点击安装,重新启动即可解决问题。
1033 0