gpt4 book ai didi

c++ - 如何从这些信息中追踪错误代码

转载 作者:行者123 更新时间:2023-11-30 04:00:10 24 4
gpt4 key购买 nike

我的项目非常大并且是多线程的。应该有一个导致整个程序崩溃的错误。

对于release版本,它有时会卡住,但不会经常出现。对于调试代码,它更容易出现。 gdb 的堆栈跟踪如下。

0  clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:81
1 0x00007dff8270c700 in ?? ()
2 0x00007ffff6dde38d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

此信息不足以让我找到错误代码。

所以我的问题是:如何从崩溃中获取更多信息?对 gdb 或其他高级工具有任何高级使用吗?

=============更新==============

要补充的信息,在打印出所有线程 ID 后,我找出了崩溃的线程。线程的唯一区别是它与标准线程对象分离。如果有人对此有任何经验,请告诉我。

=============更新2 ================

这个问题还没有解决,结果是一个服务器问题。如果我在终端中运行,它会使整个终端和当前以我的用户名运行的所有其他程序崩溃。然后系统关闭并且有一段时间无法通过 ssh 访问。还有一些其他用户的管道坏了,似乎我的程序使 sshd 没有响应。

过了一会儿,我又能登录了,发现程序的二进制文件坏了(被截断了),需要重新编译。

最佳答案

对我来说,它看起来像是内存或堆栈覆盖或死指针或对象的访问。

为了捕获这类错误,我喜欢使用 efencevalgrind 等工具。对于实际的编译器,您还可以使用 thread sanitizer内存清理器。两者都适用于 clang 和 g++。

如果你不能发现问题,你还应该安装标准库的调试库版本。有时错误的值会在 g++lib 或其他一些库中崩溃,从而导致难以调试的情况。安装调试信息后,您可以更轻松地捕捉到这一点。

关于c++ - 如何从这些信息中追踪错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484033/

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