服务器程序处于无限循环中.如何检查它
A server program is on an infinite loop. How to check for it?
服务器程序处于无限循环中。如何检查?
我的解决方案:
使用GDB检查控制循环的条件变量的值。
对于小程序是可以的。
对于大型程序如何做到这一点?
如果程序没有在GDB中运行,如何检测无穷循环?
谢谢
您可以使用某种形式的看门狗计时器。让程序定期输出一个字符或触摸一个文件,这样如果它陷入循环,一个单独的进程可以检测到看门狗没有更新,并杀死/重置进程。
很多微控制器的硬件都内置了这个,如果你不重置计时器,它们会自动重置。非常方便:)
如果程序在服务器上运行,您可以通过提供其pid将GDB进程附加到它。
例如使用ps:
查找进程的pidps ax | grep server_process
3789 ?? S 0:00.58 /usr/bin/server_process
3790 ?? S 0:00.58 /usr/bin/server_process
18002 ?? S 0:00.58 grep server_process
你可能想要孩子:
使用GDB附加到正在运行的进程
gdb /usr/bin/server_process 3790
…加载符号
gdb>
快乐追踪:)
当然,将server_process替换为您的程序名称和适当的路径:p
检测无限循环称为不可判定的停机问题。
所以原则上没有确定的方法来检测它
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 我如何循环循环switch语句检查重新检查char?(C )
- Visual Studio - 如何从 C++ 核心指南检查器检查路径中排除文件夹