V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
typetraits
V2EX  ›  C++

一个 C++程序调试问题

  •  
  •   typetraits · 2020-12-04 16:07:39 +08:00 · 1418 次点击
    这是一个创建于 1452 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个 RPC 服务,用了 boost.context 实现了用户态协程,默认给每个协程分配 1M 栈大小,现在打算测试减小栈大小从而降低内存占用,减小到 128K 时程序出现随机崩溃,猜测是此时栈爆了,但是无法回溯完整的调用栈(调试器中最多回溯到 boost.context 中的 trampoline 处)。
    然后想到了 AddressSantizer,https://clang.llvm.org/docs/AddressSanitizer.html 看起来是支持栈越界检测的,但是奇怪的是该程序开启 AddressSantizer 后就不再崩溃了,现在很懵,不知道该怎么调试确定问题
    2 条回复    2020-12-04 16:45:19 +08:00
    wutiantong
        1
    wutiantong  
       2020-12-04 16:29:41 +08:00
    栈爆了又不是 bug,有啥好分析的?
    128k 太小就用 256k 好啦,相比 1m 不是已经优化了 75%了么?
    typetraits
        2
    typetraits  
    OP
       2020-12-04 16:45:19 +08:00 via iPhone
    @wutiantong 就是想调试一下看看栈的使用情况,毕竟 goroutine 默认栈大小只有 8KB

    不过想了一下确实优化意义不大,数据不放在分配的这个栈上,也是直接放进堆里,该用的内存一点不会少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:32 · PVG 20:32 · LAX 04:32 · JFK 07:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.