gpt4 book ai didi

c - 如何破解 C Linux 中的间歇性错误?

转载 作者:太空狗 更新时间:2023-10-29 12:06:05 24 4
gpt4 key购买 nike

关于如何破解这个错误,我已经没有什么好主意了。我有 1000 行代码,每运行 2 或 3 次就会崩溃。它目前是一个用 C 编写的原型(prototype)命令行应用程序。一个问题是它是专有的,我不能给你源代码,但我很乐意将调试编译的可执行文件发送给 Debian Squeeze x86_64 机器上的任何勇敢的灵魂。

这是我到目前为止得到的:

  1. 当我在 GDB 中运行它时,它总是成功完成。

  2. 当我在 Valgrind 中运行它时,它总是成功完成。

  3. 问题似乎源于一个非常基本的递归函数调用。为了查明此递归函数中的错误,我在单独的应用程序中编写了相同的函数。它总是成功完成。

  4. 我构建了自己的 gcc 4.7.1 编译器,用它编译了我的代码,但我仍然得到相同的行为。

  5. 通过 FT 将我的应用程序转移到另一台机器以消除硬件问题的风险,但我仍然遇到相同的行为。

  6. 将我的源代码通过 FT 传输到另一台机器以消除构建环境损坏的风险,但我仍然遇到相同的行为。

该应用程序是单线程的,不进行可能导致竞争条件的信号处理。我memset(,0,)所有大对象

没有外来依赖,ldd如下。

ldd 给我这个:

ldd tst 
linux-vdso.so.1 => (0x00007fff08bf0000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fe8c65cd000)
libm.so.6 => /lib/libm.so.6 (0x00007fe8c634b000)
libc.so.6 => /lib/libc.so.6 (0x00007fe8c5fe8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe8c67fc000)

是否有任何工具可以帮助我?如果您处于我的位置,您的下一步是什么?

谢谢!

这让我走上了正确的方向 -Wextra 我已经使用过 -Wall。

谢谢!!!这真的让我发疯。

最佳答案

我在评论中建议:

  • 使用-Wall -Wextra编译并改进源代码直到没有警告;
  • 同时使用-g-O 进行编译;这有助于使用 gdb 检查转储的核心文件(您可能希望使用例如 ulimit bash 内置设置足够大的核心转储大小限制)
  • 向同事展示您的代码并解释问题?
  • 使用ltracestrace

显然 -Wextra 很有帮助。如果能了解原因和方式就好了。

顺便说一句,对于较大的程序,您甚至可以通过使用 MELT 扩展它来向 GCC 添加您自己的警告。 ;这可能需要几天时间,但在大型项目中主要是值得的。

关于c - 如何破解 C Linux 中的间歇性错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11709752/

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