如何从这些信息中跟踪错误代码
How to trace the buggy code from this information
我的项目很大,而且是多线程的。应该有一个错误会导致整个程序崩溃。
对于发布版本,它有时会卡住,但不会经常出现。对于调试代码,它更有可能出现。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后,我找出了崩溃的线程。线程的唯一区别是它与std线程对象分离。如果有人对此有任何经验,请告诉我。
=============更新2=============
这个问题还没有解决,结果是一个严重的问题。如果我在终端中运行,它会使整个终端和当前以我的用户名运行的所有其他程序崩溃。然后系统关闭,ssh在一段时间内无法访问系统。还有一些其他用户的管道坏了,我的程序似乎让sshd没有响应。
过了一段时间,我可以再次登录,发现程序的二进制文件已损坏(被截断),需要重新编译。
对我来说,它看起来像是内存或堆栈覆盖或对死指针或对象的访问。
为了捕捉这类错误,我喜欢使用efence
或valgrind
之类的工具。对于实际的编译器,您还可以使用线程清理程序或memory sanitizer
。两者都适用于clang和g++。
如果您不能发现这个问题,您还应该安装标准库的调试库版本。有时,一个错误的值在g++库或其他一些库中崩溃,这会导致难以调试的情况。安装调试信息后,您可以更容易地了解这一点。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 人脸跟踪arduino代码的优化
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- 更新了Runge-Kutta(RK4)C++错误代码中的二阶DE
- 获取有关使用未初始化内存的错误代码
- 需要帮助跟踪此代码中的分段错误
- 如何从这些信息中跟踪错误代码