一个 C++程序调试问题

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

不过想了一下确实优化意义不大,数据不放在分配的这个栈上,也是直接放进堆里,该用的内存一点不会少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/732160

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX