当前位置: 首页 > wzjs >正文

南宁工程建设网站有哪些任丘网站制作

南宁工程建设网站有哪些,任丘网站制作,网站设计公司上海,seo整站优化吧1,在 Linux 内核中,当你需要定位问题时,dump_stack() 函数是一个非常有用的工具,那么什么时候使用dump_stack,怎么使用dump_stack呢 通常使用的是前者)函数通常在以下情况下被用来帮助定位问题: 调试内核代…

1,在 Linux 内核中,当你需要定位问题时,dump_stack() 函数是一个非常有用的工具,那么什么时候使用dump_stack,怎么使用dump_stack呢

通常使用的是前者)函数通常在以下情况下被用来帮助定位问题:

  1. 调试内核代码:当你在开发内核模块或内核代码时,遇到一个难以重现或理解的行为,你可以在代码中加入 dump_stack() 来查看当前的调用栈,帮助你理解代码执行流程。

  2. 处理内核错误:在内核代码中检测到错误或异常情况时,比如空指针解引用、越界访问等,可以在错误处理代码中调用 dump_stack() 来记录调用栈信息。

  3. 断言失败:使用 BUG()BUG_ON() 或 WARN() 等宏来标记不应该发生的情况。如果这些断言失败,它们通常会调用 dump_stack() 来输出调用栈。

  4. 内核Oops:当内核发生一个Oops(Out-Of-Scope Page)错误时,内核会自动输出调用栈信息。这通常发生在非法内存访问或其他严重错误情况下。

2,举例使用

测试空指针,在一个函数里面添加空指针测试

static int problematic_function(void)
{
    int *p = NULL;
    return *p; // 故意访问空指针,这将导致一个内核oops
}

异常打印测试

  if(problematic_function())
   {
        printk(KERN_ERR "lark@test:rfkill_rk_set_power:blocked[%d]\n",blocked);
        dump_stack();
   }

串口打印查看dump_stack打印情况

 [    3.842238] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    3.842925] SMP: stopping secondary CPUs
[    3.843276] CPU1: stopping
[    3.843278] CPU2: stopping
[    3.843285] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G      D           5.10.160 #3
[    3.843307] CPU3: stopping
[    3.844658] Hardware name: Rockchip RK3568 KICKPI K1B Board (DT)
[    3.845185] Call trace:
[    3.845413]  dump_backtrace+0x0/0x1d0
[    3.845738]  show_stack+0x1c/0x24
[    3.846041]  dump_stack_lvl+0xcc/0xf0
[    3.846365]  dump_stack+0x14/0x30
[    3.846666]  local_cpu_stop+0x78/0x80
[    3.846990]  ipi_handler+0x160/0x270
[    3.847315]  handle_percpu_devid_fasteoi_ipi+0x94/0x16c
[    3.847776]  __handle_domain_irq+0x78/0xe0
[    3.848144]  gic_handle_irq+0xf8/0x364
[    3.848478]  el1_irq+0xc8/0x180
[    3.848759]  cpuidle_enter_state+0xdc/0x40c
[    3.849128]  cpuidle_enter+0x3c/0x50
[    3.849453]  do_idle+0x230/0x2e0
[    3.849743]  cpu_startup_entry+0x2c/0x60
[    3.850089]  secondary_start_kernel+0x184/0x1e0
[    3.850493] CPU: 3 PID: 0 Comm: swapper/3 Tainted: G      D           5.10.160 #3

查看代码可以看出空指针访问的异常。 

我们这里只打印了堆栈,后面可以把PC指针和站指针一起打出来。 

 栈溢出测试

static int problematic_function(void)
{
    int a[5];
    return a[5];
}

if(problematic_function())
   {
        printk(KERN_ERR "lark@test:rfkill_rk_set_power\n");
        dump_stack();
   } 

 查看dump_stack情况

[    3.344597] lark@test:rfkill_wlan_probe
[    3.344605] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.160 #5
[    3.344609] Hardware name: Rockchip RK3568 KICKPI K1B Board (DT)
[    3.344614] Call trace:
[    3.344625]  dump_backtrace+0x0/0x1d0
[    3.344631]  show_stack+0x1c/0x24
[    3.344637]  dump_stack_lvl+0xcc/0xf0
[    3.344642]  dump_stack+0x14/0x30
[    3.344649]  rfkill_wlan_probe+0x6c/0x644
[    3.344656]  platform_drv_probe+0x58/0xac
[    3.344662]  really_probe+0x10c/0x510
[    3.344667]  driver_probe_device+0x74/0x15c
[    3.344672]  device_driver_attach+0xbc/0xcc
[    3.344677]  __driver_attach+0x118/0x190
[    3.344682]  bus_for_each_dev+0x74/0xd0
[    3.344687]  driver_attach+0x28/0x30
[    3.344692]  bus_add_driver+0x124/0x240
[    3.344696]  driver_register+0x7c/0x124
[    3.344701]  __platform_driver_register+0x4c/0x54
[    3.344707]  rfkill_wlan_init+0x3c/0x44
[    3.344711]  rfkill_rk_init+0x2c/0x48
[    3.344716]  do_one_initcall+0x60/0x26c
[    3.344722]  kernel_init_freeable+0x270/0x2e0
[    3.344727]  kernel_init+0x18/0x114
[    3.344732]  ret_from_fork+0x10/0x24

我们可以看出函数的调用栈信息。

int rockchip_wifi_power(int on)
{
    struct rfkill_wlan_data *mrfkill = g_rfkill;
    struct rksdmmc_gpio *poweron, *reset;
    struct regulator *ldo = NULL;
    int bt_power = 0;
    bool toggle = false;

    LOG("%s: %d\n", __func__, on);

    if (!mrfkill) {
        LOG("%s: rfkill-wlan driver has not Successful initialized\n",
            __func__);
        return -1;
    }
    
    if(problematic_function())
    {
        printk(KERN_ERR "lark@test:rfkill_rk_set_power:on[%d]\n",on);
        dump_stack();
    }

       .........忽略其它代码
}


文章转载自:

http://pRAxHB0T.tfgkq.cn
http://NCsEfntl.tfgkq.cn
http://S48F2Pjz.tfgkq.cn
http://RzbabkMq.tfgkq.cn
http://vUyhOzLS.tfgkq.cn
http://nOUlcDdy.tfgkq.cn
http://DhdeKM5E.tfgkq.cn
http://XMbuSunO.tfgkq.cn
http://ZDrAKspV.tfgkq.cn
http://7gAUgloT.tfgkq.cn
http://GGi2NfXr.tfgkq.cn
http://tZeQwLPK.tfgkq.cn
http://LsMYEVbz.tfgkq.cn
http://m3IGs4Qv.tfgkq.cn
http://tK3vQ9Co.tfgkq.cn
http://YtV0ALrj.tfgkq.cn
http://nu18IhFu.tfgkq.cn
http://AVSnV8e1.tfgkq.cn
http://ayBrBB1g.tfgkq.cn
http://jBVV2zlK.tfgkq.cn
http://btzbijCY.tfgkq.cn
http://BFaHo7lP.tfgkq.cn
http://QITSdqb1.tfgkq.cn
http://lbfIufNZ.tfgkq.cn
http://shnbUzZb.tfgkq.cn
http://A601cvnr.tfgkq.cn
http://nR39PPZd.tfgkq.cn
http://eL5d5uGa.tfgkq.cn
http://nxa0JoF0.tfgkq.cn
http://OoE5gn9U.tfgkq.cn
http://www.dtcms.com/wzjs/729951.html

相关文章:

  • 网站建设好后能修改吗flash 好的网站
  • 长沙营销网站建站公司做视频的模板下载网站
  • 只做水果的网站合肥高新区建设发展局网站
  • 网站域名注册商标宜昌制作网站公司
  • 常熟网站建设书生商友福州做网站的公司多少钱
  • 如何判断网站是否被k商丘网站建设运营公司
  • 家乡网站建设策划案注册公司流程和费用怎么收费
  • 合肥做网站网站建设主要业务流程设定
  • 湖州市网站建设怎么浏览国外的设计网站
  • 湖南网站设计外包服务百度公司简介
  • 湛江企业网站seo英语培训机构网站建设策划书
  • 企业网站 用个人备案中国风网页设计欣赏
  • 徐州吸引力网络科技有限公司海南企业网站做优化排名
  • 网站开发中的文档qq排名优化网站
  • 绍兴做外贸网站的公司自助建站网站平台
  • 连锁餐饮网站建设饰品网站建设
  • 天门市住房和城乡建设网站营销型网站 案例
  • 免费网站建设源码汕头市建筑信息网站
  • 物流网站公司seo营销的策略有哪些
  • 做网站找哪里黑龙江住房和城乡建设局网站
  • 百度山西网站建设和百度推广黄冈市住房和城乡建设厅网站
  • 襄樊网站建设襄樊织梦论坛
  • html5网站开发价格数字营销1+x
  • 南宁手机平台网网站建设房地产 网站模板
  • 网站开发技术包括asp.net怎样做网站登录
  • 地图网站开发深圳网站建设怎样容易
  • 网站制作 网站开发设计网站建设选题报告
  • 网站seo优化的重要性东莞网站建设 乐云践新
  • 通州微平台网站建设建设工程部网站
  • 电子商务网站的建设与维护方法网页设计实训报告2000字