如何查找程序正在等待的位置
How to find where the program is waiting
我正在开发一个大的代码库。它是多线程的。
在运行linux based
应用程序几个小时后,最后,就在报告之前,应用程序将静音。它不会死,不会崩溃,只是在那里等待。联接、互斥、条件变量。。。其中任何一个都可能是罪魁祸首。
如果它崩溃了,我至少有机会使用调试器找到源代码。但通过这种方式,我不知道如何使用什么工具来查找错误。我甚至不能为你发布代码示例。唯一可能有帮助的是用cout
点击许多地方,以直观地了解应用程序的位置
你遇到过这样的情况吗?你推荐什么?
如果您在Linux下运行,那么只需使用gdb
来运行程序。当应用程序"静音"时,用CTRL+C
中断它,然后键入backtrace
查看调用堆栈。有了这个,你会发现你的应用程序被阻止的功能。
在linux环境下,gdb会有很大帮助。另一个有很大帮助的工具是strace(这也可以用于程序出现问题的地方,因为strace不需要重新编译来跟踪它们,所以源代码不容易获得。)
strace应截获/记录进程调用的系统调用以及进程接收的信号。它将能够显示事件的顺序以及调用的所有返回/恢复路径。这可以让你更接近问题所在。
iotop、LTTng和Ftrace是在这种情况下对您有帮助的少数其他工具。
相关文章:
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 如何在特定位置追加 json 文件
- 在特定位置为字符串添加空格
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 在等待时破坏condition_variable
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 如何设置 cmake 以在不同位置查找标头和库
- 工作线程一直在等待,condition_variable甚至调用了notify_all
- 在某个位置划分链表
- 为什么存储在内存位置的值会发生变化?
- 创建一个函数以在给定位置将元素插入到列表中
- 为什么condition_variable在等待生产者-消费者的锁定?C++
- 在不同位置渲染相同精灵的数组
- C++ 友元函数在内存位置上有何不同?
- MATLAB API用于使用MatgetDir的C例外:Matrix :: Serialize ::在内存位置内置
- 在不同位置绘制多次glbatch
- 在给定的整数数组中,可以找到在给定位置之间分类数组的整数之和
- 仅在等待 20 秒后更新数据库记录,以便可以接收最大记录
- Java本机接口-C 不在等待Java功能完成
- 串行端口卡在等待位置(4,