如何确定程序在无响应时正在执行的操作
How to determine what program is doing when it becomes non responsive?
我的程序在执行某个函数时变得无响应。我怎样才能实时看到它在做什么,以了解它为什么变得无响应?
它没有崩溃,所以不幸的是我看不到原因。我怎样才能知道它在做什么?
我能做什么?在这种情况下,有哪些程序对于有和没有实际源代码都很好?
您需要在调试器中运行,然后在速度变慢时中断执行。 它停止的地方很可能是你的问题所在。 如果您多次启动和停止,则最常中断的位置执行可能会肯定地说。
或者使用探查器。 任何一个程序都可以在没有源代码的情况下工作,尽管将它们与源代码和调试符号一起使用要容易得多(不需要在您运行的平台上具有相当多的汇编知识技能)。
看看 Process Monitor from Sysinternals http://technet.microsoft.com/en-us/sysinternals/bb896645
A. 与源代码
您可以将 Visual Studio 附加到进程并按中断。之后查看调用堆栈。如果 ti 没有崩溃,则可能没有递归。所以你应该看看它在做什么。
如果是多线程应用程序,则在线程之间切换并监视调用堆栈。
B. 没有源代码我认为这很难。唯一能找到的是外部分析。像wireshark来监视网络活动或从Sysinternals(procmon.exe)的进程监视器来查看注册表或文件访问。
相关文章:
- 按下Arduino按钮后,如何在C#应用程序上执行操作
- 是否可以访问类数据成员并在析构函数中对它们执行操作?
- 如何让派生类在调用基类之前执行操作?
- CListCtrl 根据选定的行值执行操作
- 在服务器上执行操作的正确和 REST 方式?
- 是否可以拦截/检测关闭 PC 并首先执行操作的请求?
- 如何有效地使用 std::async 对指针数组执行操作
- 无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满
- 递归推动POP POSTFIX计算器无法正确执行操作,只需将最后一个数字作为结果
- QListWidgetItem 当按钮单击时执行操作
- 为什么C++没有简洁的语法允许在不定义计数器的情况下多次执行操作?
- 如何在标准库C/C++函数中进行gdb单步执行操作
- 如何对 n 个字符串执行操作,然后在C++中打印它们
- 从文件中读取运算符并执行操作C++
- 使用重载运算符在函数调用时执行操作
- 您如何选择在opencv-dnn上执行操作的设备
- 如何使用BoostSpirit.Qi增量解析(并对其执行操作)大文件
- 在remove_if删除元素之前,我可以滥用谓词对元素执行操作吗
- 在使用Qt修改任何复选框状态时执行操作
- 是否可以在不使用任何头文件的情况下在C++中执行I/O操作