建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

System.map文件的作用(解决vue-router路由拦截造成死循环问题介绍)

GG网络技术分享 2025-03-18 16:14 0


System.map文件的作用

有关System.map文件的信息好象很缺乏。其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要。但是由于缺乏必要的文档说明,使其显得比较神秘。它就象耳垂,我们每个人都有,但却不知道是干什么用的。本网页就是用来说明这个问题的。

注意,我并不会是百分之一百正确的。例如,一个系统很可能没有/proc文件系统支持,但是大多数系统肯定有。这里我假定你是“随大流的”,并有一个典型配置的系统。

某些有关内核出错(oops)的阐述来自于Alessandro Rubini的“Linux设备驱动程序” 一书,我是从其中学到大部分内核编程知识的。

什么是符号(Symbols)?

内核符号表(Kernel Symbol Table)是什么东西?

什么是System.map文件?

  • /proc/ksyms
  • System.map

什么是一个Oops?

一个Oops与System.map文件有什么关系呢?

  • 静态转换,将使用System.map文件。
  • 动态转换,该方式用于可加载模块,不使用System.map,因此与本讨论没有关系,但我仍然对其加以简单说明。

System.map应该位于什么地方?

  • /boot/System.map
  • /System.map
  • /usr/src/linux/System.map
  • 在2.5.x系列内核的某个版本,Linux内核会开始untar成linux-version,而非只是linux (请举手表决 -- 有多少人一直等待着这样做?)。我不知道klogd是否已经修改为在/usr/src/linux-version/System.map中搜索。TODO:查看klogd源代码。
  • 在线手册上对此也没有完整描述,请看:
  • #strace -f /sbin/klogd | grep \'System.map\'
  • 31208 open(\"/boot/System.map-2.4.18\", O_RDONLY|O_LARGEFILE) = 2
  • 显然,不仅klogd在三个搜索目录中寻找正确版本的map文件,klogd也同样知道寻找名字为 \"System.map\" 后加\"-内核版本\",象 System.map-2.4.18. 这是klogd未公开的特性。

还有谁使用了System.map?

如果我没有一个好的System.map,会发生什么问题?

我如何对上述情况进行补救?

  • /boot/vmlinuz-2.2.14
  • /boot/vmlinuz-2.2.13
  • /boot/vmlinuz-2.2.14
  • /boot/vmlinuz-2.2.14.nosound
  • /boot/System.map-2.2.14
  • /usr/src/linux/System.map (对于nosound版本)

解决vue-router路由拦截造成死循环问题介绍

这篇文章主要介绍了解决vue-router路由拦截造成死循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

笔记:vue-router路由拦截造成死循环,在做路由拦截的时候,一直出现死循环.

const router = new Router({

routes: [{path: \'/login\',name: \'login\',component: Login,meta: {isShow: true}},

{path: \'/\',component: Layout,redirect: \'/home\',meta: {title: \"首页菜单\"},

children: [{ path: \'home\', name: \'home\', component: () => import(\'@/views/Hmoe\'),

meta: { title: \"首页\" } }],}]

})

一开始路由拦截是这样写的,但是这样的结果就是,在token存在的时候,可以直接访问login页面,但是实际项目中是,在token存在的时候不能可以访问login页面

router.beforeEach((to, from, next) => {

if (!to.meta.isShow && !sessionStorage.getItem(\"token\")) {

return next(\'/login\');

}

next();

})

根据项目的需求进行修改,然后就出现下图的报错,出现了死循环

router.beforeEach((to, from, next) => {

if (sessionStorage.getItem(\"token\")) {

if (to.meta.isShow) {

next(\'/home\')

} else {

next()

}

} else {

next(\'/login\');

}

})

//检查代码

router.beforeEach((to, from, next) => {

if (sessionStorage.getItem(\"token\")) {

if (to.meta.isShow) {

console.log(\"1\")

next(\'/home\')

} else {

console.log(\"2\")

next()

}

} else {

console.log(\"3\")

next(\'/login\');

}

})

解决vue-router路由拦截造成死循环问题介绍 (https://www.wpmee.com/) javascript教程 第1张

解决vue-router路由拦截造成死循环问题介绍 (https://www.wpmee.com/) javascript教程 第2张

然后接着进行修改,就把浏览器弄崩溃了,此处省略一万字T_T.......

最后修改的代码,终于得到了最终的需要的结果

router.beforeEach((to, from, next) => {

if (sessionStorage.getItem(\'token\')) {//toekn存在

if (to.path == \'/login\') {//token存在,并且是login页面

next(\'/home\');

} else {//token存在,不是login页面

next();

}

} else {

if (to.path == \'/login\') {//token不存在,并且是login页面

next();

} else {//token不存在,不是login页面

next(\'/login\');

}

}

});

关于vue-router导航守卫,官方给出的解释是

解决vue-router路由拦截造成死循环问题介绍 (https://www.wpmee.com/) javascript教程 第3张

出现无限循环是因为之前我没有弄清楚next()流程

因为每次跳转到一个路由的时候都会 触发 全局守卫 由于判断条件未改变 所以 一直循环

关于上面代码我自己的理解,就是当token存在的时候,判断页面是否是login页面,如果是就next到首页,不是就直接next。如果token不存在,页面为login就直接next,不是login就直接next到login页面,因为一开始在第一个else里面没有做判断,那么他的条件一直未改变,所以他会一直重复next到login才造成的死循环,后面写了判断之后就正常了....

补充知识:vue-router promise问题

最近在项目中使用element发现了一个bug

侧边栏list 点击没问题 如果在这个点击页面 在点击一次router-link 就会报错 但是不影响功能

去你引用vue-router的页面添加一段代码

const originalPush = Router.prototype.push

Router.prototype.push = function push(location) {

return originalPush.call(this, location).catch(err => err)

}

以上这篇解决vue-router路由拦截造成死循环问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

解决vue-router路由拦截造成死循环问题介绍 (https://www.wpmee.com/) javascript教程 第4张

标签:

提交需求或反馈

Demand feedback