当前位置:首页>python>为什么?Python 报错直接给你堆栈.C++ 报错就一个 Segmentation fault.

为什么?Python 报错直接给你堆栈.C++ 报错就一个 Segmentation fault.

  • 2026-06-29 03:33:05
为什么?Python 报错直接给你堆栈.C++ 报错就一个 Segmentation fault.

为什么?Python 报错直接给你堆栈。C++ 报错就一个 Segmentation fault。

这个问题困扰了大家好多年,其实现在 C++ 打印调用栈用一个 std::stacktrace::current() 就可以了。


一、技术选型

场景
推荐方案
GCC 14+ / Clang 16+
std::stacktrace
GCC 9–13
backward-cpp
需要 Boost
boost::stacktrace
嵌入式 / 无标准库
libunwind
 + addr2line
线上崩溃分析
backward-cpp
 + 符号分离

优先级:C++23 > backward-cpp > 其他。


二、C++23 标准方案

1、基础用法

#include<iostream>#include<stacktrace>voidlevel_3(){std::cout << std::stacktrace::current() << '\n';}voidlevel_2(){ level_3(); }voidlevel_1(){ level_2(); }intmain(){ level_1(); }

这就是 C++ 的 traceback.print_stack()

输出:

 0# level_3() at /path/to/main.cpp:7 1# level_2() at /path/to/main.cpp:10 2# level_1() at /path/to/main.cpp:13 3# main at /path/to/main.cpp:16

文件名、行号、函数名全有。无需第三方库,无需手动解析 DWARF,无需 fork 子进程调用 addr2line。

2、格式化输出

默认格式够用,也支持自行控制:

std::stacktrace st = std::stacktrace::current();for (constauto& entry : st) {std::cout << entry.description()   // 函数名              << " at " << entry.source_file()              << ":" << entry.source_line()              << '\n';}

3、信号处理器

#include<csignal>#include<stacktrace>#include<iostream>voidsignal_handler(int sig){std::cerr << "Caught signal " << sig << '\n';std::cerr << std::stacktrace::current() << '\n';std::_Exit(EXIT_FAILURE);}intmain(){std::signal(SIGSEGV, signal_handler);std::signal(SIGABRT, signal_handler);// 业务逻辑}

程序崩溃时,信号处理器拦截,在死亡前留下完整堆栈。std::cout 在信号处理器中不安全,安全版本见第五章。


三、backward-cpp:不能升编译器时的选择

很多工程绑定在 GCC 9/10 上,升级编译器意味着漫长的回归测试。backward-cpp 是这些工程里最务实的选择。

纯 Header-only,Linux 需要 libdw(libdw-dev),macOS 用系统自带的 libunwind,Windows 用系统自带的 DbgHelp。一条 #include "backward.hpp" 就能跑。

1、崩溃自动捕获

#include"backward.hpp"backward::SignalTrace st;  // RAII,构造时自动注册信号处理器intmain(){// 程序正常结束时,SignalTrace 不做任何事// 任何位置崩溃,自动打印堆栈后退出}

注册 SIGSEGV、SIGABRT、SIGFPE、SIGILL,程序任何位置崩都能拿到堆栈。

2、手动打印

不需要全局捕获,只想在特定位置打印:

#include"backward.hpp"voidcrash_func(){    backward::StackTrace st;    st.load_here(32);  // 捕获当前栈的前 32 帧    backward::Printer p;    p.print(st);}

3、过滤 STL

大型工程中,堆栈往往被 STL 内部帧淹没。backward-cpp 支持自定义过滤:

backward::StackTrace st;st.load_here(64);backward::Printer p;p.snippet = true;   // 显示源码片段p.color = true;     // 彩色输出p.address = false;  // 生产环境隐藏地址p.context = 2;      // 每帧显示 2 行源码p.print(st, [](const backward::Frame& f) {conststd::string& name = f.name;return name.find("std::") == 0 || name.find("__gnu_cxx") == 0;});

四、跨平台特殊处理

Windows:没有 execinfo.h 和 addr2line

Windows 上的调试工具是 WinDbg 或 cdb.exe

cdb -z my_program.exe -c "ln 0x00007ff6`a1b3c000; q"

调试信息格式为 PDB,功能等价于 Linux 的 DWARF。微软符号服务器:SRV*...*https://msdl.microsoft.com/download/symbols

macOS:依赖 libunwind,符号解析用 atos

atos -o MyApp.app.dSYM -l 0x100000000 0x401234

macOS 的 DWARF 调试信息通常在 .dSYM 文件夹中,发布时不要 strip 掉。


五、信号处理器和编译配置

1、信号处理器里的 async-signal-safe

这里有个细节很多人不知道:信号处理器运行在中断上下文,不是所有标准库函数都能在里面调用。

std::cout 涉及缓冲区和内部锁,printf 依赖锁,snprintf 内部可能调用 malloc

POSIX 明确标注为 async-signal-safe 的 I/O 操作只有一个:write() 系统调用。

所以堆栈打印要这么写:

#include<csignal>#include<stacktrace>#include<unistd.h>#include<cstdlib>voidsig_handler(int){std::stacktrace st = std::stacktrace::current();for (auto it = st.begin(); it != st.end(); ++it) {constauto& e = *it;char frame[512];int pos = 0;        frame[pos++] = '#';if (std::distance(st.begin(), it) < 10)            frame[pos++] = '0' + std::distance(st.begin(), it);        frame[pos++] = ' ';// description(取前 60 字节)conststd::string& desc = e.description();for (size_t i = 0; i < desc.size() && i < 60 && pos < 480; ++i)            frame[pos++] = desc[i];        frame[pos++] = ' ';        frame[pos++] = '@';// source_fileconststd::string& file = e.source_file();for (size_t i = 0; i < file.size() && pos < 460; ++i)            frame[pos++] = file[i];        frame[pos++] = ':';// source_line(纯整数转字符串)int line = static_cast<int>(e.source_line());if (line > 0) {char num[12];int nd = 0, tmp = line;if (tmp == 0) num[nd++] = '0';else { while (tmp > 0) { num[nd++] = '0' + tmp % 10; tmp /= 10; } }for (int j = nd - 1; j >= 0 && pos < 500; --j) frame[pos++] = num[j];        }        frame[pos++] = '\n';        write(STDERR_FILENO, frame, pos);    }    _Exit(EXIT_FAILURE);}

还有一种情况:内存分配器已经损坏时,std::stacktrace::current() 本身可能再次触发 SIGSEGV。用 sigsetjmp 保护一下:

#include<csignal>#include<csetjmp>#include<stacktrace>#include<unistd.h>#include<cstdlib>staticthread_local sigjmp_buf jump_buffer;staticthread_localvolatilesig_atomic_t in_handler = 0;voidsafe_handler(int sig){if (in_handler) _Exit(128 + sig);  // 防止递归    in_handler = 1;    write(STDERR_FILENO, "Fatal signal\n"14);if (sig == SIGSEGV) write(STDERR_FILENO, "SIGSEGV\n"8);elseif (sig == SIGABRT) write(STDERR_FILENO, "SIGABRT\n"8);if (sigsetjmp(jump_buffer, 1) == 0) {for (constauto& e : std::stacktrace::current()) {            write(STDERR_FILENO, "  "2);conststd::string& d = e.description();            write(STDERR_FILENO, d.data(), std::min(d.size(), size_t(64)));            write(STDERR_FILENO, "\n"1);        }    }    _Exit(128 + sig);}

Chromium 和 Google crashpad 的崩溃报告用的就是这套逻辑。

2、编译参数决定堆栈质量上限

堆栈信息不完整,很多人第一反应是代码问题。实际上大概率是编译配置的问题。

Debug 版

set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -fno-omit-frame-pointer -fno-inline")

Release 版

set(CMAKE_CXX_FLAGS_RELEASE "-g -O2 -fno-omit-frame-pointer")

**Release 版也要 -g**。

几个关键参数:

  • -g:生成 DWARF 调试信息
  • -O0:Debug 版关闭优化,保证行号精确
  • -fno-omit-frame-pointer:保留栈帧指针,确保 unwinding 正常
  • -fno-inline:Debug 版禁止内联,减少栈层级丢失
  • -rdynamic(或 -Wl,--export-dynamic):导出动态符号到符号表,addr2line 才能解析动态库中的符号

3、异常中主动打印

大部分人只在崩溃时才想起堆栈。catch 块其实是获取上下文最丰富的位置:

try {    risky_operation();catch (conststd::exception& e) {std::cerr << "Exception: " << e.what() << '\n';std::cerr << "Stack at throw site:\n"              << std::stacktrace::current() << '\n';throw;}

还有一个细节:noexcept 函数抛出异常时,程序直接 std::terminate(),完全跳过栈展开。堆栈拿到的是异常发生点,但传播路径全丢了。

// noexcept 内部可能抛异常boolprocess_data(conststd::vector<int>& data)noexcept{for (size_t i = 0; i < data.size(); ++i) {if (data[i] < 0)throwstd::invalid_argument("negative");    }returntrue;}// noexcept(false) 才保留完整堆栈boolprocess_data(conststd::vector<int>& data)noexcept(false){// ...}

noexcept 只留给确定不抛异常的底层函数,业务函数通常应该带 noexcept(false) 或不加。


六、符号管理与常见问题

1、Release 版保留调试信息

分离调试信息是行业惯例:

# 生成带完整符号的二进制g++ -g -O0 -o my_program_debug main.cpp# 提取调试信息到独立文件objcopy --only-keep-debug my_program_debug my_program.debug# 生成发行版(去除调试节,保留符号表)strip -g my_program_debug -o my_program_release

Linux 发行版标准路径:/usr/lib/debug/.build-id/xx/yyyy.debugaddr2line 会自动查找对应文件的调试信息。

# 查看 build-idreadelf -n my_program_release | grep Build.ID# 离线解析addr2line -e my_program_release -f -C 0x401234

2、常见失效原因

症状
原因
解决
输出全是 ??:0
没有 DWARF 信息
检查 -g,检查是否被 strip
堆栈层数偏少
内联优化
Debug 加 -fno-inline
堆栈层数偏少(release)
栈帧被省略
加 -fno-omit-frame-pointer
符号是乱码 _Z4funcv
未 demangle
c++filt
 或 addr2line -C
动态库全是地址
符号未导出
加 -rdynamic
段错误时堆栈为空
栈本身损坏
退化到 backtrace() + _exit()

七、统一封装接口

一个头文件解决所有平台差异,条件编译自动选择最优后端:

#pragma once#include<optional>#include<string>#if __has_include(<stacktrace>)#include<stacktrace>#define STACKTRACE_BACKEND "std::stacktrace (C++23)"#define STACKTRACE_IMPL(...) do { \    auto st = std::stacktrace::current(); \    for (auto it = st.begin(); it != st.end(); ++it) { \        auto& e = *it; \        std::cerr << "#" << std::distance(st.begin(), it) << " " \                  << e.description() << " @ " \                  << e.source_file() << ":" \                  << e.source_line() << "\n"; \    } \} while(0)#elif __has_include("backward.hpp")#include"backward.hpp"#define STACKTRACE_BACKEND "backward-cpp"#define STACKTRACE_IMPL(...) do { \    backward::StackTrace st; \    st.load_here(64); \    backward::Printer p; \    p.print(st); \} while(0)#else#include<execinfo.h>#include<cxxabi.h>#include<dlfcn.h>#define STACKTRACE_BACKEND "libunwind (fallback)"#define STACKTRACE_IMPL(...) do { \    void* frames[64]; \    int n = backtrace(frames, 64); \    for (int i = 1; i < n; ++i) { \        Dl_info info; \if (dladdr(frames[i], &info)) { \            int status; \            char* demangled = abi::__cxa_demangle( \                info.dli_sname, nullptr, nullptr, &status); \            const char* name = (status == 0 && demangled) \                ? demangled : info.dli_sname; \            fprintf(stderr, "#%d %s in %s\n", \                i - 1, name ? name : "?", info.dli_fname); \if (demangled) free(demangled); \        } \    } \} while(0)#endifnamespace stacktrace {inlinevoidprint(){std::cerr << "=== Stack trace (backend: "              << STACKTRACE_BACKEND << ") ===\n";    STACKTRACE_IMPL();}}  // namespace stacktrace

使用:

#include"stacktrace.hpp"intmain(){    stacktrace::print();}

一个头文件,一行调用。引入新项目直接扔进去,不用关心底层实现。


八、总结

现在的实现路径其实很清晰:

能用 C++23 先用 C++23。std::stacktrace::current() 是官方标准,零依赖,一行代码。

不能升编译器就用 backward-cpp。Header-only,彩色输出,信号自动捕获,引入成本极低。

堆栈质量的上限由编译配置决定,不是代码。-g 保留,strip 不要用。

还有一个习惯:在 catch 块里顺手打印堆栈,比崩溃后追原因高效得多。

Python 的调用栈打印之所以舒服,是因为它被做进了语言和标准库。C++ 走了一条更长的路,但现在这条路已经走到了终点。


关键命令

# 编译带调试信息g++ -g -O0 -rdynamic -o my_program main.cpp# 解析地址addr2line -e my_program -f -C 0x401234# 分离调试信息objcopy --only-keep-debug my_program my_program.debugstrip -g my_program -o my_program_stripped# 验证 DWARF 存在readelf -S my_program | grep .debug_info

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 01:28:01 HTTP/2.0 GET : https://f.mffb.com.cn/a/486731.html
  2. 运行时间 : 0.294546s [ 吞吐率:3.40req/s ] 内存消耗:5,699.06kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a6c00aae75289ac31b262e46c155ccc0
  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.000528s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000947s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.011732s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.014137s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000774s ]
  6. SELECT * FROM `set` [ RunTime:0.001127s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000717s ]
  8. SELECT * FROM `article` WHERE `id` = 486731 LIMIT 1 [ RunTime:0.003284s ]
  9. UPDATE `article` SET `lasttime` = 1783099681 WHERE `id` = 486731 [ RunTime:0.010032s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.005298s ]
  11. SELECT * FROM `article` WHERE `id` < 486731 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005209s ]
  12. SELECT * FROM `article` WHERE `id` > 486731 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001999s ]
  13. SELECT * FROM `article` WHERE `id` < 486731 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001692s ]
  14. SELECT * FROM `article` WHERE `id` < 486731 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.057341s ]
  15. SELECT * FROM `article` WHERE `id` < 486731 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.080558s ]
0.297103s