当前位置:首页>Linux>嵌入式Linux老鸟工具箱:那些让你少熬夜的神兵利器

嵌入式Linux老鸟工具箱:那些让你少熬夜的神兵利器

  • 2026-06-28 01:32:12
嵌入式Linux老鸟工具箱:那些让你少熬夜的神兵利器

嵌入式Linux老鸟工具箱:那些让你少熬夜的神兵利器

入行三年靠勤奋,入行五年靠工具。嵌入式Linux这个坑,坑深水冷,能从里面爬出来的,手边都备着几把趁手的家伙什儿。本文聊的,就是老鸟们每天都在用、新手却常常不知道的那批工具。


一、perf —— 性能问题的"显微镜"

为何要它

你有没有遇到过这种情况:板子跑起来莫名其妙卡顿,top 看 CPU 占用率也不高,代码看了三遍也没发现哪里有问题?这时候就该请出 perf 了。

perf 是 Linux 内核自带的性能分析框架,基于硬件性能计数器(PMU)和内核事件,能以极低的开销告诉你:谁在占用 CPU、Cache miss 在哪、系统调用热点是什么。它不是 top 那种粗粒度看热闹的工具,而是能精确到函数级别的手术刀。

典型使用场景

场景1:找 CPU 热点函数

# 采样 30 秒,生成火焰图数据
perf record -g -p <pid> -- sleep 30
perf report --stdio

拿到输出你会看到类似这样的调用栈,一眼就知道时间花在哪儿了。

场景2:Cache Miss 分析(嵌入式尤为重要)

# 统计 L1 cache miss 次数
perf stat -e cache-misses,cache-references ./your_app

ARM Cortex-A 系列的 Cache 较小,数据访问模式不对会严重拖慢性能,这个命令直接量化问题。

场景3:配合火焰图(Flame Graph)

perf record -F 99 -g -p <pid> -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > out.svg

生成的 SVG 打开浏览器就能交互式探索,产品经理看不懂,但你看懂了就行。

常见的坑

  • • 嵌入式板子的内核要开启 CONFIG_PERF_EVENTS,很多精简内核默认没开,编译前先确认。
  • • ARM 平台采样频率不能设太高(-F 参数),否则采样中断本身就成了性能瓶颈,属于自己把自己搞死的经典操作。
  • • 交叉编译环境下,perf 工具版本必须和目标板内核版本匹配,否则符号解析会一团乱麻。

二、strace / ltrace —— 应用程序的"窃听器"

为何要它

新来的同事说:"程序在我电脑上好好的,放到板子上就报 Segmentation fault,不知道为什么。"

此刻,strace 就是你的救星。

strace 追踪进程的系统调用ltrace 追踪库函数调用。程序和操作系统之间的每一次对话,都逃不过它的眼睛。文件没找到、权限不够、设备节点缺失……这类问题靠它分分钟定位。

典型使用场景

场景1:程序启动失败,找缺失的库或文件

strace -e trace=openat,read,write ./your_app 2>&1 | grep -E "ENOENT|EACCES"

输出里带 ENOENT(文件不存在)或 EACCES(权限拒绝)的行,就是案发现场。

场景2:网络通信调试

strace -e trace=network -p <pid>

能看到所有 socket 相关调用,发包收包一览无余,比 Wireshark 更直接告诉你是谁发的

场景3:I2C/SPI 设备调试

嵌入式里大量设备通过 /dev/i2c-* 或 spidev 操作,strace 能记录每次 ioctl 的参数,对照数据手册直接比较,省去大量盲调时间。

strace -e ioctl ./sensor_app

常见的坑

  • • strace 本身有性能开销,实时系统里用它会导致时序改变,"观察者效应"会让 bug 消失——这很正常,不是你的错。
  • • 目标板上通常没有预装,需要交叉编译后 push 上去,记得用静态链接版本(-static),免得又缺库。

三、GDB + JTAG/OpenOCD —— 硬件级别的"侦探"

为何要它

有些 bug 只在硬件上复现,printf 加不进去,程序在某个神秘的地方飞了。这时候,软件调试器已经无能为力,你需要直接插到芯片里去看。

JTAG 是硬件调试接口,OpenOCD 是开源的调试服务器,GDB 是调试前端。三者配合,可以做到:

  • • 在裸机阶段(bootloader 都还没起来)设断点
  • • 查看寄存器、内存内容
  • • 单步执行,看代码到底走哪条路

典型使用场景

基本连接流程:

# 1. 启动 OpenOCD(以 ST-Link 为例)
openocd -f interface/stlink.cfg -f target/stm32h7x.cfg

# 2. 另开终端,GDB 远程连接
arm-none-eabi-gdb vmlinux
(gdb) target remote :3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue

场景:内核 panic 定位

内核挂掉时,通过 GDB 可以看完整的调用栈,结合 vmlinux(带符号的内核镜像)精确定位到出问题的函数和行号。

(gdb) bt        # 打印调用栈
(gdb) frame 3   # 切换到第3帧
(gdb) list      # 显示源码

常见的坑

  • • JTAG 线序别接错,特别是 VCC 和 GND,接反了轻则调试器冒烟,重则板子直接报销。
  • • OpenOCD 配置文件和目标芯片要严格对应,版本也要匹配,否则连不上或者工作不稳定。
  • • 用 GDB 调 Linux 内核时,关掉 KASLR(内核地址随机化),否则符号地址对不上:bootargs 加 nokaslr

四、ftrace —— 内核行为的"CT扫描仪"

为何要它

当你怀疑是内核本身在搞鬼——中断延迟太高、调度抖动、实时性达不到要求——perf 的粒度还不够,你需要 ftrace

ftrace 是 Linux 内核内置的追踪框架,无需安装任何东西,通过 /sys/kernel/debug/tracing/ 文件系统操作,可以追踪几乎所有内核函数调用、中断、调度事件。

典型使用场景

场景1:测量中断延迟(实时系统必备)

# 开启中断延迟追踪
echo irqsoff > /sys/kernel/debug/tracing/current_tracer
echo 1 > /sys/kernel/debug/tracing/tracing_on
# ...等待一段时间后
echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace

输出直接告诉你最长关中断时间是多少微秒,发生在哪个函数里。

场景2:追踪函数调用链

echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo your_driver_func > /sys/kernel/debug/tracing/set_graph_function

打印出带缩进的函数调用树,驱动里的调用顺序一目了然。

场景3:使用 trace-cmd 简化操作

# trace-cmd 是 ftrace 的命令行封装,更好用
trace-cmd record -e sched_switch -e irq_handler_entry sleep 5
trace-cmd report

配合 kernelshark GUI 工具,可以可视化分析调度行为。

常见的坑

  • • debugfs 默认不一定挂载,需要手动 mount -t debugfs none /sys/kernel/debug
  • • 追踪高频函数时,trace buffer 会快速写满,适当调大:echo 65536 > buffer_size_kb
  • • 生产环境慎用,ftrace 开启期间有额外 overhead,影响系统行为。

五、Buildroot vs Yocto —— 根文件系统的"两种哲学"

为何要它

做嵌入式 Linux,你总得给板子弄个 rootfs。手工搭?不是不行,但你得先解决几百个依赖,交叉编译到头秃。这就是 Buildroot 和 Yocto 存在的意义。

Buildroot:简单直接,Make 驱动,几百个软件包配置一应俱全,从零到一个可运行的系统,熟练了半天搞定。适合中小型项目、快速原型、定制化需求不太复杂的场景。

Yocto:工业级别的构建系统,BitBake + layer 架构,可重复性极强,支持复杂的多机型、多配置管理。学习曲线陡峭,但一旦掌握,做商业产品几乎是标配。

选择依据

场景
推荐
原型验证、学习嵌入式Linux
Buildroot
单一产品快速交付
Buildroot
多平台、长期维护的商业产品
Yocto
需要严格的软件供应链管理
Yocto
团队超过5人协作开发BSP
Yocto

Buildroot 典型用法

make menuconfig         # 图形化选配置
make list-defconfigs    # 看有没有现成的板级配置
make raspberrypi4_64_defconfig  # 以树莓派4为例
make -j$(nproc)         # 开跑,去喝杯咖啡

输出在 output/images/rootfs.tar.gz 就是你要的根文件系统。

Yocto 典型用法

source oe-init-build-env
# 编辑 conf/local.conf 设置 MACHINE
bitbake core-image-minimal   # 构建最小镜像

第一次构建可能要几个小时,Yocto 会在本地建一个完整的构建缓存(sstate-cache),后续增量构建就快了。

常见的坑

  • • Buildroot 的包版本是固定在某个快照的,安全补丁需要自己打,长期维护产品要注意 CVE。
  • • Yocto 的 layer 兼容性是个麻烦事,不同 release(kirkstone、scarthgap……)之间 recipe 不能直接混用,升级内核版本时 layer 也得跟着升。

六、minicom / picocom —— 串口调试的"老伙计"

为何要它

没有串口,嵌入式就是在黑箱里操作。板子启动的第一行打印、内核 panic 的错误信息、Shell 交互——这些都要靠串口。

minicom 功能丰富,支持脚本、文件传输;picocom 轻量简洁,连 busybox 的机器上都能跑,老鸟通常更喜欢后者。

常用命令

# picocom 连接,115200 波特率
picocom -b 115200 /dev/ttyUSB0

# 常用快捷键
Ctrl+A X   # 退出
Ctrl+A S   # 发送文件(Xmodem/Ymodem)
Ctrl+A Q   # 不复位直接退出

常见的坑

  • • 波特率设置错了,终端乱码,新手以为板子坏了——先确认 U-Boot 或内核配置里的波特率再说。
  • • /dev/ttyUSB0 没权限,加到 dialout 组:sudo usermod -aG dialout $USER,重新登录生效。

七、devmem2 —— 寄存器的"直接读写神器"

为何要它

驱动还没写好,但你想先验证一下硬件寄存器配置对不对?不用等驱动,devmem2 直接通过 /dev/mem 映射物理地址,读写任意寄存器。

# 读取地址 0xFF200000 处的32位寄存器
devmem2 0xFF200000 w

# 写入值
devmem2 0xFF200000 w 0x12345678

对着数据手册,确认外设时钟使能寄存器、GPIO配置寄存器是否正确,分分钟搞定。

常见的坑

  • • 内核开启了 CONFIG_STRICT_DEVMEM 的话,访问受保护区域会被拒绝,需要用 devmem2 的内核模块版本或者关掉这个配置。
  • • 写错地址可能直接导致内核崩溃或硬件损坏,操作前务必对照数据手册三遍确认

八、Valgrind —— 内存问题的"照妖镜"

为何要它

内存问题是嵌入式 Linux 应用开发的头号杀手。越界写、use-after-free、内存泄漏……这类 bug 有个共同特点:出事的地方不是案发现场。程序可能跑了两个小时之后才在一个毫不相干的地方崩掉,你对着 coredump 抓耳挠腮,完全不知道从哪里下手。

这时候 valgrind 就是你的照妖镜。它通过动态二进制插桩,在程序运行时监控每一次内存操作,一旦出现问题立刻报告,精确到文件名和行号。

嵌入式领域特别需要它,原因很简单:嵌入式设备资源紧张,内存泄漏在 PC 上跑一天可能没感觉,在板子上跑几个小时就 OOM 了,而且复现条件往往只有在目标硬件上才能触发。

典型使用场景

场景1:检测内存泄漏(最高频用途)

valgrind --leak-check=full \
         --show-leak-kinds=all \
         --track-origins=yes \
         --log-file=valgrind.log \
         ./your_app

报告长这样,直接告诉你哪行代码分配了内存但没释放:

==12345== 512 bytes in 1 blocks are definitely lost in loss record 3 of 5
==12345==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
==12345==    by 0x10875B: init_sensor_buffer (sensor.c:42)
==12345==    by 0x108A3C: main (main.c:18)

sensor.c:42 分配的内存,一路追到 main.c:18,你甚至不用去翻代码,直接开编辑器跳过去。

场景2:检测非法内存访问(堆越界、use-after-free)

valgrind --tool=memcheck ./your_app
==12345== Invalid write of size 4
==12345==    at 0x108ABC: process_packet (network.c:88)
==12345==  Address 0x5204e80 is 0 bytes after a block of size 64 alloc'd
==12345==    at 0x4C2FB0F: malloc (...)
==12345==    by 0x108901: alloc_packet_buf (network.c:31)

"0 bytes after a block of size 64"——一个经典的 off-by-one 越界,就这么被揪出来了。

场景3:Massif —— 堆内存使用分析

程序没崩,但内存一直在涨?用 massif 工具追踪堆的增长曲线:

valgrind --tool=massif --pages-as-heap=yes ./your_app
ms_print massif.out.<pid> | head -60

输出一张 ASCII 的堆内存随时间变化图,哪个阶段内存暴涨一眼看出来,配合调用栈找到元凶。

场景4:交叉编译场景下在目标板运行

这是嵌入式特有的麻烦——valgrind 不支持直接交叉编译到目标板,需要针对目标架构单独编译:

# 以 ARM64 为例,在构建机上交叉编译 valgrind
./configure --host=aarch64-linux-gnu \
            --prefix=/opt/valgrind-arm64 \
            CC=aarch64-linux-gnu-gcc
make -j$(nproc)
make install
# 然后把 /opt/valgrind-arm64 整个 scp 到目标板

目标板上运行时,程序要带调试符号(编译时加 -g,不要 strip),否则报告里全是问号,等于白跑。

常见的坑

  • • 速度奇慢是正常的。Valgrind 的动态插桩让程序跑慢 10~50 倍,实时性要求高的代码跑 valgrind 会触发各种超时,测试前要先把超时时间调大,或者把实时相关路径单独摘出来测。
  • • 嵌入式板子内存小,valgrind 自身也要吃内存。它的 shadow memory 机制会额外消耗约 1~2 倍的进程内存,在 256MB RAM 的板子上跑复杂应用很可能 OOM 死掉,建议先在 PC 上的 QEMU 仿真环境里跑,问题大概率一样能复现。
  • • 误报问题。某些系统库(特别是 glibc 内部实现)会触发 valgrind 的误报,需要用 suppression 文件过滤。官方提供了 valgrind --gen-suppressions=all 半自动生成抑制规则,别嫌麻烦,值得做一次。
  • • 和 AddressSanitizer(ASan)的关系:如果你的编译器够新(GCC 4.8+ / Clang 3.1+),优先考虑用 ASan,只需在编译时加 -fsanitize=address,开销比 valgrind 小得多(约2倍),且支持实时性更好。valgrind 的优势在于不需要重新编译,对已有二进制直接分析,这在拿不到源码或构建环境复杂时是无可替代的。

九、综合实战:一次完整的性能问题排查

真实项目中,问题往往不是单一工具能解决的,老鸟的本事就在于工具组合拳

假设场景:一个音频处理应用,偶发性出现音频卡顿(glitch),客户催得要命。

Step 1strace -T 看系统调用耗时,找有没有异常的阻塞调用。

Step 2:用 ftrace 的 irqsoff tracer 确认中断延迟是否超标(实时音频通常要求 < 1ms)。

Step 3perf record -g 采样 CPU,用火焰图确认是否有某个函数在卡顿时刻占了过多 CPU。

Step 4:用 devmem2 检查 DMA 相关寄存器,确认 audio DMA 配置正确。

Step 5dmesg -w 实时监控内核日志,看卡顿时刻有没有内存回收(memory reclaim)或其他内核事件的日志。

最终发现:卡顿时 ftrace 显示有个 USB 中断处理函数持有自旋锁时间过长,影响了音频 DMA 中断响应。问题找到,fix 五行代码,收工。


总结

工具
解决什么问题
上手难度
perf
CPU热点、Cache Miss、性能瓶颈
⭐⭐⭐
strace/ltrace
系统调用追踪、启动失败定位
⭐⭐
GDB+JTAG
硬件级调试、内核panic定位
⭐⭐⭐⭐
ftrace
内核行为、中断延迟、调度抖动
⭐⭐⭐
Buildroot/Yocto
根文件系统构建
⭐⭐ / ⭐⭐⭐⭐
minicom/picocom
串口交互调试
devmem2
寄存器直接读写验证
⭐⭐
valgrind
内存泄漏、越界、use-after-free
⭐⭐⭐

工具是手段,理解背后的原理才是根本。但别误会——在产品交付的压力下,用正确的工具快速定位问题,本身就是一种专业能力。

祝各位少熬夜,多睡觉。板子能调好,不一定非要靠眼睛充血。


参考资料:Linux kernel documentation (kernel.org/doc)、Brendan Gregg's perf examples (brendangregg.com)、Yocto Project官方文档、OpenOCD User's Guide

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 09:45:17 HTTP/2.0 GET : https://f.mffb.com.cn/a/489769.html
  2. 运行时间 : 0.224034s [ 吞吐率:4.46req/s ] 内存消耗:4,392.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=69dbcb6694369b313564c6e124ac451b
  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.000512s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000577s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002625s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001231s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000512s ]
  6. SELECT * FROM `set` [ RunTime:0.000230s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000587s ]
  8. SELECT * FROM `article` WHERE `id` = 489769 LIMIT 1 [ RunTime:0.002067s ]
  9. UPDATE `article` SET `lasttime` = 1783043117 WHERE `id` = 489769 [ RunTime:0.002647s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.001078s ]
  11. SELECT * FROM `article` WHERE `id` < 489769 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000834s ]
  12. SELECT * FROM `article` WHERE `id` > 489769 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.020208s ]
  13. SELECT * FROM `article` WHERE `id` < 489769 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.033783s ]
  14. SELECT * FROM `article` WHERE `id` < 489769 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.035362s ]
  15. SELECT * FROM `article` WHERE `id` < 489769 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.023896s ]
0.226530s