当前位置:首页>Linux>Linux 内核 Call Trace 完全解析指南

Linux 内核 Call Trace 完全解析指南

  • 2026-03-27 12:35:35
Linux 内核 Call Trace 完全解析指南

🔧从原理到实战,掌握内核崩溃问题的诊断与解决


📋 目录速览


    🎯 什么是 Call Trace

    定义

    Call Trace(调用栈跟踪)是 Linux 内核在发生错误、警告或崩溃时,打印出的函数调用链路信息。它显示了程序执行到出错点的完整路径。

    为什么会出现 Call Trace?

    Call Trace 的作用


    📝 Call Trace 的类型

    1. Kernel Oops

    特征:内核遇到错误但尝试继续运行

    2. Kernel Panic

    特征:内核崩溃,系统停止运行

    3. Warning

    特征:内核警告,但继续运行

    4. Soft Lockup

    特征:CPU 长时间不响应(通常超过 20 秒)

    5. Hard Lockup

    特征:中断被长时间禁用


    🔍 如何读懂 Call Trace

    Call Trace 的结构

    解读关键信息

    1. 错误类型

    常见错误类型:
    • NULL pointer dereference
      空指针解引用,访问了地址 0 或接近 0 的内存
    • general protection fault
      一般保护错误,非法内存访问
    • unable to handle kernel paging request
      内核分页请求失败,访问了无效地址
    • divide error
      除零错误
    • invalid opcode
      无效指令
    • stack segment fault
      栈段错误

    2. 地址信息

    at 0000000000000008
       ↑
       错误发生的内存地址
    • 0x00000000 附近:空指针解引用
    • 0xffff8800xxxxxxxx:内核空间地址(x86_64)
    • 0x00007fxxxxxxxxxx:用户空间地址(x86_64)

    3. 指令指针(RIP/IP)

    含义

    • 错误发生在 my_module 模块的 my_function 函数中

    • 距离函数起始位置 0x12(18)字节

    • 函数总大小 0x34(52)字节

    4. CPU 和进程信息

    Tainted 标志含义

    G - 所有模块都有 GPL 许可
    P - 加载了专有模块
    F - 模块被强制加载
    S - SMP 内核在非 SMP 硬件上运行
    R - 模块被强制卸载
    M - 机器检查异常
    B - 页面释放函数报告错误
    U - 用户空间应用程序请求的污染
    D - 内核最近死过
    A - ACPI 表被覆盖
    W - 触发了警告
    C - 加载了分段模块
    I - 使用了不安全的平台固件
    O - 加载了外部模块(out-of-tree)
    E - 未签名的模块被加载
    L - 发生了软锁定
    K - 内核已被实时补丁

    5. 寄存器状态

    x86_64 寄存器用途

    RAX - 累加器,函数返回值
    RBX - 基址寄存器
    RCX - 计数器
    RDX - 数据寄存器
    RSI - 源索引(第2个参数)
    RDI - 目的索引(第1个参数)
    RBP - 栈帧指针
    RSP - 栈指针
    R8-R15 - 通用寄存器
    RIP - 指令指针

    6. 调用栈(Call Trace)

    阅读顺序

    • 从上到下:从出错点到调用链的起点

    • 最上面的函数是直接出错的位置

    • 往下是调用链路

    特殊标记

    <IRQ>  - 中断上下文
    </IRQ> - 中断上下文结束
    <NMI>  - 不可屏蔽中断
    </NMI> - NMI 结束
    ?      - 不确定的调用

    🛠️ 调试工具与方法

    1. addr2line - 地址转行号

    # 将地址转换为源代码位置
    addr2line -e vmlinux -f-i <address>
    # 示例
    addr2line -e vmlinux -f-i ffffffff81234567
    # 输出
    my_function
    /usr/src/linux-4.19.0/drivers/net/my_driver.c:123
    # 对于模块
    addr2line -e my_module.ko -f-i 0x123456

    参数说明

    • -e: 指定可执行文件或模块

    • -f: 显示函数名

    • -i: 显示内联函数

    2. objdump - 反汇编

    # 反汇编内核模块
    objdump -dS my_module.ko > my_module.asm
    # 查找特定函数
    objdump -dS my_module.ko | grep-A50"<my_function>:"
    # 查看特定地址的代码
    objdump -dS--start-address=0x123456 --stop-address=0x123500 my_module.ko

    示例输出

    3. gdb - 调试器

    # 加载内核符号
    gdb vmlinux
    # 加载模块符号
    (gdb) add-symbol-file my_module.ko 0xffffffffa0000000
    # 查看函数源码
    (gdb) list my_function
    # 查看特定地址
    (gdb) x/10i 0xffffffffa0123456
    # 反汇编函数
    (gdb) disassemble my_function
    # 查看结构体
    (gdb) ptype struct my_struct

    4. crash - 内核崩溃分析工具

    # 分析 vmcore
    crash vmlinux vmcore
    # 常用命令
    crash> bt              # 显示调用栈
    crash> log             # 查看内核日志
    crash> ps# 查看进程列表
    crash> files           # 查看打开的文件
    crash> vm              # 查看虚拟内存
    crash> struct task_struct <address>  # 查看结构体
    crash> dis <function>  # 反汇编函数
    crash> mod             # 查看加载的模块

    5. decode_stacktrace.sh - 自动解析

    # 内核自带的脚本
    ./scripts/decode_stacktrace.sh vmlinux /path/to/modules < call_trace.txt
    # 示例输入
    [<ffffffffa0123456>] my_function+0x12/0x34 [my_module]
    # 输出
    my_function (/path/to/my_driver.c:123)

    6. 使用 ftrace 追踪

    # 启用函数追踪
    echofunction > /sys/kernel/debug/tracing/current_tracer
    # 设置追踪的函数
    echo my_function > /sys/kernel/debug/tracing/set_ftrace_filter
    # 启用追踪
    echo1 > /sys/kernel/debug/tracing/tracing_on
    # 查看追踪结果
    cat /sys/kernel/debug/tracing/trace
    # 停止追踪
    echo0 > /sys/kernel/debug/tracing/tracing_on

    7. kgdb - 内核调试器

    # 内核启动参数
    kgdboc=ttyS0,115200 kgdbwait
    # 在另一台机器上连接
    gdb vmlinux
    (gdb) target remote /dev/ttyS0
    (gdb) continue
    # 设置断点
    (gdb) break my_function
    (gdb) continue
    # 单步执行
    (gdb) step
    (gdb) next

    🔬 常见问题分析

    1. 空指针解引用

    典型 Call Trace

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
    RIP: [<ffffffffa0123456>] my_function+0x12/0x34 [my_module]

    原因分析

    // 问题代码
    structmy_struct*ptr=NULL;
    intvalue=ptr->field;  // 访问 NULL 指针的成员

    调试步骤

    # 1. 使用 addr2line 定位
    addr2line -e my_module.ko -f-i 0x123456
    # 2. 查看反汇编
    objdump -dS my_module.ko | grep-A20"<my_function>:"
    # 3. 分析寄存器
    # 如果 RAX=0,且代码是 mov 0x8(%rax),%rbx
    # 说明在访问 NULL+8 的位置

    解决方案

    // 修复代码
    structmy_struct*ptr=get_my_struct();
    if (ptr==NULL) {
    pr_err("Failed to get struct\n");
    return-EINVAL;
    }
    intvalue=ptr->field;  // 安全访问

    2. Use-After-Free

    典型 Call Trace

    BUG: unable to handle kernel paging request at ffff880012345678
    RIP: [<ffffffffa0123456>] my_function+0x12/0x34 [my_module]

    原因分析

    // 问题代码
    structmy_struct*ptr=kmalloc(sizeof(*ptr), GFP_KERNEL);
    kfree(ptr);
    ptr->field=10;  // 使用已释放的内存

    调试方法

    # 启用 KASAN(Kernel Address Sanitizer)
    CONFIG_KASAN=y
    # 启用 SLUB 调试
    slub_debug=FZPU
    # 使用 kmemleak 检测内存泄漏
    echo scan > /sys/kernel/debug/kmemleak
    cat /sys/kernel/debug/kmemleak

    解决方案

    // 修复代码
    structmy_struct*ptr=kmalloc(sizeof(*ptr), GFP_KERNEL);
    ptr->field=10;
    kfree(ptr);
    ptr=NULL;  // 释放后置空

    3. 死锁

    典型 Call Trace

    BUG: soft lockup - CPU#2 stuck for 22s! [my_process:1234]
    RIP: [<ffffffffa0123456>] my_spinlock_function+0x12/0x34 [my_module]

    原因分析

    // 问题代码
    spin_lock(&lock_a);
    spin_lock(&lock_b);  // 另一个线程可能以相反顺序获取锁

    调试方法

    # 启用死锁检测
    CONFIG_PROVE_LOCKING=y
    CONFIG_DEBUG_LOCK_ALLOC=y
    CONFIG_LOCKDEP=y
    # 查看锁的持有情况
    cat /proc/lockdep
    cat /proc/lockdep_stats
    # 使用 SysRq 查看所有 CPU 的调用栈
    echo l > /proc/sysrq-trigger
    dmesg | tail -100

    解决方案

    // 修复代码 - 统一锁的获取顺序
    voidfunction1() {
    spin_lock(&lock_a);
    spin_lock(&lock_b);
    // ...
    spin_unlock(&lock_b);
    spin_unlock(&lock_a);
    }
    voidfunction2() {
    spin_lock(&lock_a);  // 相同的顺序
    spin_lock(&lock_b);
    // ...
    spin_unlock(&lock_b);
    spin_unlock(&lock_a);
    }

    4. 栈溢出

    典型 Call Trace

    BUG: stack guard page was hit at ffff88007fc03000
    RIP: [<ffffffffa0123456>] my_recursive_function+0x12/0x34 [my_module]

    原因分析

    // 问题代码
    voidmy_function() {
    charbuffer[8192];  // 栈上分配大数组
    // 或者无限递归
    my_function();
    }

    调试方法

    # 检查栈使用情况
    CONFIG_DEBUG_STACK_USAGE=y
    # 查看栈使用
    cat /proc/<pid>/stack

    解决方案

    // 修复代码
    voidmy_function() {
    char*buffer=kmalloc(8192GFP_KERNEL);  // 使用堆内存
    if (!buffer)
    return-ENOMEM;
    // ...
    kfree(buffer);
    }

    5. 中断上下文错误

    典型 Call Trace

    原因分析

    // 问题代码 - 在中断中睡眠
    irqreturn_tmy_interrupt_handler(intirqvoid*dev_id)
    {
    msleep(100);  // 错误:中断中不能睡眠
    returnIRQ_HANDLED;
    }

    解决方案

    // 修复代码 - 使用工作队列
    structwork_structmy_work;
    irqreturn_tmy_interrupt_handler(intirqvoid*dev_id)
    {
    schedule_work(&my_work);  // 调度工作队列
    returnIRQ_HANDLED;
    }
    voidmy_work_handler(structwork_struct*work)
    {
    msleep(100);  // 在进程上下文中可以睡眠
    }

    6. 内存越界

    典型 Call Trace

    BUG: KASAN: slab-out-of-bounds in my_function+0x12/0x34 [my_module]
    Write of size 4 at addr ffff880012345678 by task my_process/1234

    原因分析

    // 问题代码
    char*buffer=kmalloc(10GFP_KERNEL);
    buffer[15='x';  // 越界写入

    调试方法

    # 启用 KASAN
    CONFIG_KASAN=y
    # 启用 SLUB 调试
    CONFIG_SLUB_DEBUG=y
    slub_debug=FZPU

    解决方案

    // 修复代码
    char*buffer=kmalloc(20GFP_KERNEL);  // 分配足够的空间
    if (!buffer)
    return-ENOMEM;
    buffer[15='x';  // 安全访问

    📊 实战案例

    案例 1:网卡驱动空指针

    Call Trace

    分析步骤

    1. 定位源码位置

    addr2line -e stmmac.ko -f-i 0x123456
    # 输出:stmmac_xmit
    # /drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:2345
    1. 查看源码

    // stmmac_main.c:2345
    staticnetdev_tx_tstmmac_xmit(structsk_buff*skbstructnet_device*dev)
    {
    structstmmac_priv*priv=netdev_priv(dev);
    structdma_desc*desc=priv->dma_tx+entry;  // 可能 priv->dma_tx 为 NULL
    desc->des0=skb->data;  // 空指针解引用
    }
    1. 查看寄存器

    RAX: 0000000000000000  ← priv->dma_tx 的值
    RDI: ffff880037a5c000  ← priv 的地址
    1. 根本原因

    • priv->dma_tx 未初始化或初始化失败

    • 在 stmmac_open() 中 DMA 分配失败但未检查

    1. 修复方案

    staticnetdev_tx_tstmmac_xmit(structsk_buff*skbstructnet_device*dev)
    {
    structstmmac_priv*priv=netdev_priv(dev);
    // 添加检查
    if (unlikely(!priv->dma_tx)) {
    dev_err(priv->device"DMA TX not initialized\n");
    dev_kfree_skb(skb);
    returnNETDEV_TX_OK;
        }
    structdma_desc*desc=priv->dma_tx+entry;
    desc->des0=skb->data;
    }

    案例 2:连接跟踪表死锁

    Call Trace

    分析步骤

    1. 识别问题

    • 任务被阻塞超过 120 秒

    • 在连接跟踪锁上等待

    1. 查看所有 CPU 状态

    echo l > /proc/sysrq-trigger
    dmesg | tail -200
    1. 发现死锁

    CPU 0: 持有 lock_a,等待 lock_b
    CPU 2: 持有 lock_b,等待 lock_a
    1. 根本原因

    • 两个 CPU 以不同顺序获取锁

    • 形成循环等待

    1. 修复方案

    // 统一锁的获取顺序
    // 或使用 spin_lock_nested()
    spin_lock(&lock_a);
    spin_lock_nested(&lock_bSINGLE_DEPTH_NESTING);

    案例 3:内存泄漏导致 OOM

    Call Trace

    分析步骤

    1. 检查内存使用

    cat /proc/meminfo
    free -h
    1. 使用 kmemleak 检测

    1. 定位泄漏点

    // 问题代码
    voidmy_function(void)
    {
    char*buffer=kmalloc(1024GFP_KERNEL);
    if (some_error)
    return;  // 忘记释放 buffer
    kfree(buffer);
    }
    1. 修复方案

    // 修复代码
    voidmy_function(void)
    {
    char*buffer=kmalloc(1024GFP_KERNEL);
    if (!buffer)
    return;
    if (some_error)
    gotoout_free;  // 使用 goto 统一清理
    out_free:
    kfree(buffer);
    }

    🛡️ 预防措施

    1. 编码规范

    // ========== 指针检查 ==========
    // 总是检查指针是否为 NULL
    structmy_struct*ptr=get_my_struct();
    if (!ptr) {
    pr_err("Failed to get struct\n");
    return-EINVAL;
    }
    // ========== 内存管理 ==========
    // 使用 goto 标签统一清理资源
    intmy_function(void)
    {
    char*buf1=NULL*buf2=NULL;
    intret=0;
    buf1=kmalloc(SIZE1GFP_KERNEL);
    if (!buf1) {
    ret=-ENOMEM;
    gotoout;
        }
    buf2=kmalloc(SIZE2GFP_KERNEL);
    if (!buf2) {
    ret=-ENOMEM;
    gotoout_free_buf1;
        }
    // 正常处理
    out_free_buf2:
    kfree(buf2);
    out_free_buf1:
    kfree(buf1);
    out:
    returnret;
    }
    // ========== 锁的使用 ==========
    // 统一锁的获取顺序
    // 使用 spin_lock_irqsave 在中断和进程上下文共享数据时
    unsignedlongflags;
    spin_lock_irqsave(&my_lockflags);
    // 临界区
    spin_unlock_irqrestore(&my_lockflags);
    // ========== 中断上下文 ==========
    // 不要在中断中睡眠
    // 不要在中断中使用 GFP_KERNEL 分配内存
    irqreturn_tmy_irq_handler(intirqvoid*dev_id)
    {
    // 使用 GFP_ATOMIC
    char*buf=kmalloc(SIZEGFP_ATOMIC);
    // 不要调用 msleep, mutex_lock 等
    returnIRQ_HANDLED;
    }
    // ========== 边界检查 ==========
    // 总是检查数组边界
    if (index>=ARRAY_SIZE) {
    pr_err("Index out of bounds: %d\n"index);
    return-EINVAL;
    }
    array[index=value;

    2. 内核配置选项

    # ========== 调试选项 ==========
    # 启用内核调试
    CONFIG_DEBUG_KERNEL=y
    # 启用内核地址消毒器(检测内存错误)
    CONFIG_KASAN=y
    # 启用 SLUB 调试
    CONFIG_SLUB_DEBUG=y
    # 启用死锁检测
    CONFIG_PROVE_LOCKING=y
    CONFIG_DEBUG_LOCK_ALLOC=y
    CONFIG_LOCKDEP=y
    # 启用栈溢出检测
    CONFIG_DEBUG_STACK_USAGE=y
    CONFIG_DEBUG_STACKOVERFLOW=y
    # 启用内存泄漏检测
    CONFIG_DEBUG_KMEMLEAK=y
    # 启用原子操作检测
    CONFIG_DEBUG_ATOMIC_SLEEP=y
    # 启用 RCU 调试
    CONFIG_PROVE_RCU=y
    # 启用软锁定检测
    CONFIG_SOFTLOCKUP_DETECTOR=y
    # 启用硬锁定检测
    CONFIG_HARDLOCKUP_DETECTOR=y

    3. 静态分析工具

    # ========== sparse - 内核静态分析 ==========
    makeC=1CF="-D__CHECK_ENDIAN__"
    # ========== coccinelle - 语义补丁 ==========
    make coccicheck MODE=report
    # ========== checkpatch.pl - 代码风格检查 ==========
    ./scripts/checkpatch.pl --file drivers/net/my_driver.c
    # ========== smatch - 静态分析 ==========
    makeCHECK="smatch -p=kernel"C=1

    4. 运行时检测

    # ========== 启用 SLUB 调试 ==========
    # 内核启动参数
    slub_debug=FZPU
    # F - 启用一致性检查
    # Z - 红区检测
    # P - 毒化(Poisoning)
    # U - 用户跟踪
    # ========== 启用 lockdep ==========
    echo1 > /proc/sys/kernel/lock_stat
    # 查看锁统计
    cat /proc/lock_stat
    # ========== 启用 ftrace ==========
    # 追踪函数调用
    echo function_graph > /sys/kernel/debug/tracing/current_tracer
    echo1 > /sys/kernel/debug/tracing/tracing_on
    cat /sys/kernel/debug/tracing/trace

    5. 代码审查清单

    ✓ 内存管理
      □ 所有 kmalloc/kzalloc 都检查返回值
      □ 所有分配的内存都有对应的释放
      □ 使用 goto 标签统一清理资源
      □ 释放后将指针置为 NULL
    ✓ 指针使用
      □ 使用前检查指针是否为 NULL
      □ 避免悬空指针
      □ 注意指针的生命周期
    ✓ 锁的使用
      □ 统一锁的获取顺序
      □ 持有锁的时间尽可能短
      □ 中断和进程上下文共享数据使用 spin_lock_irqsave
      □ 避免在持有锁时睡眠
    ✓ 中断处理
      □ 中断处理函数尽可能短
      □ 不在中断中睡眠
      □ 使用 GFP_ATOMIC 分配内存
      □ 耗时操作使用工作队列
    ✓ 边界检查
      □ 数组访问前检查索引
      □ 字符串操作使用安全函数(strncpy, snprintf)
      □ 用户输入严格验证
    ✓ 错误处理
      □ 所有错误路径都正确处理
      □ 返回值都被检查
      □ 错误信息清晰明确

    📚 总结

    核心要点

    1. 理解 Call Trace 结构:错误类型、地址、寄存器、调用栈

    2. 掌握调试工具:addr2line、objdump、gdb、crash

    3. 系统化分析:从 Call Trace 到源码,从现象到根因

    4. 预防为主:编码规范、静态分析、运行时检测

    5. 持续学习:积累经验,建立问题库

    常见错误类型速查

    错误类型典型特征常见原因
    NULL pointerat 0x00000000指针未初始化、初始化失败
    Use-after-free随机地址使用已释放的内存
    Soft lockupstuck for Xs长时间占用 CPU、死循环
    Hard lockupNMI watchdog中断被长时间禁用
    Stack overflowstack guard page栈上分配大数组、递归
    Deadlockblocked for Xs锁顺序不一致、循环等待
    OOMOut of memory内存泄漏、分配过多


    Call Trace 是内核给我们的重要线索,学会解读它,就能快速定位和解决问题。


    📖 参考资料

    • Linux Kernel Documentation

    • Understanding the Linux Kernel

    • Linux Device Drivers

    • Kernel Debugging Tips

    最新文章

    随机文章

    基本 文件 流程 错误 SQL 调试
    1. 请求信息 : 2026-03-27 13:04:03 HTTP/2.0 GET : https://f.mffb.com.cn/a/480688.html
    2. 运行时间 : 0.148769s [ 吞吐率:6.72req/s ] 内存消耗:4,853.49kb 文件加载:140
    3. 缓存信息 : 0 reads,0 writes
    4. 会话信息 : SESSION_ID=015923e311ed9c32aacf69f7e7542f0d
    1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
    2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
    3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
    4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
    5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
    6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
    7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
    8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
    9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
    10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
    11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
    12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
    13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
    14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
    15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
    16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
    17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
    18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
    19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
    20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
    21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
    22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
    23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
    24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
    25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
    26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
    27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
    28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
    29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
    30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
    31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
    32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
    33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
    34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
    35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
    36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
    37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
    38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
    39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
    40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
    41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
    42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
    43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
    44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
    45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
    46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
    47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
    48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
    49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
    50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
    51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
    52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
    53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
    54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
    55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
    56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
    57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
    58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
    59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
    60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
    61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
    62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
    63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
    64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
    65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
    66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
    67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
    68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
    69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
    70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
    71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
    72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
    73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
    74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
    75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
    76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
    77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
    78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
    79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
    80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
    81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
    82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
    83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
    84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
    85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
    86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
    87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
    88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
    89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
    90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
    91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
    92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
    93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
    94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
    95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
    96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
    97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
    98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
    99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
    100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
    101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
    102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
    103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
    104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
    105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
    106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
    107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
    108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
    109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
    110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
    111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
    112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
    113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
    114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
    115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
    116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
    117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
    118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
    119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
    120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
    121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
    122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
    123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
    124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
    125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
    126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
    127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
    128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
    129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
    130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
    131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
    132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
    133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
    134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
    135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
    136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
    137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
    138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
    139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
    140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
    1. CONNECT:[ UseTime:0.000422s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
    2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000580s ]
    3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001047s ]
    4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005019s ]
    5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000558s ]
    6. SELECT * FROM `set` [ RunTime:0.001807s ]
    7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000685s ]
    8. SELECT * FROM `article` WHERE `id` = 480688 LIMIT 1 [ RunTime:0.005707s ]
    9. UPDATE `article` SET `lasttime` = 1774587844 WHERE `id` = 480688 [ RunTime:0.000589s ]
    10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001210s ]
    11. SELECT * FROM `article` WHERE `id` < 480688 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003557s ]
    12. SELECT * FROM `article` WHERE `id` > 480688 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005845s ]
    13. SELECT * FROM `article` WHERE `id` < 480688 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009807s ]
    14. SELECT * FROM `article` WHERE `id` < 480688 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008921s ]
    15. SELECT * FROM `article` WHERE `id` < 480688 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013172s ]
    0.150337s