gpt4 book ai didi

c - 负载很大才出现的bug怎么调试?

转载 作者:太空狗 更新时间:2023-10-29 16:36:20 26 4
gpt4 key购买 nike

我们目前正在用C语言开发一个集群管理器软件,如果几个节点连接到管理器,它工作完美,但是如果我们使用一些工具模拟1000个节点连接管理器,它有时会以意想不到的方式工作。

如何调试这种错误?只有在负载(连接/节点)很大时才会出现?

如果我使用 gdb 逐步调试,应用程序永远不会出现故障。

最佳答案

How to debug this kind of bug?

一般来说,您至少要使用这些技术:

  1. 确保代码在没有警告的情况下编译和链接。 -Wall 是一个好的开始,但 -Wextra 更好。
  2. 确保应用程序具有内置的日志记录和跟踪功能,可以打开或关闭,并且具有足够的详细信息来调试此类问题,并且开销较低。
  3. 确保代码具有良好的单元测试覆盖率。
  4. 确保测试是 sanitizer 清洁的。

there's also no warning in valgrind check.

不清楚您是否只是在 Valgrind 下运行了目标应用程序,或者您是否还进行了单元测试,并且这些测试是 Valgrind 干净的。也不清楚您是否观察到应用程序在 Valgrind 下的不当行为。

Valgrind 曾经是解决堆和未初始化内存问题的最佳工具,但在 2017 年,情况已不再如此。

基于编译器 Address , ThreadMemory sanitizer 可以捕获更广泛的错误类别(例如全局和堆栈溢出,以及数据竞争),您应该在所有这些错误下运行单元测试。

当上述所有方法仍然无法找到问题时,您可以运行带有 sanitizer 的真实应用程序。

最后,还有像 GDB tracing 这样的工具和 systemtap -- 它们更难学习,但会给你很大的力量。概述here .

关于c - 负载很大才出现的bug怎么调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46541124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com