主题说明了一切。关闭我的应用程序后,它会保留在具有一些内存的进程列表中。我尝试了google perf工具和数小时的调试来查找泄漏。
是否有其他工具可以测试并发现问题?
谢谢。
答案 0 :(得分:1)
我的猜测是你关闭了顶级窗口,因此关闭了所有子窗口,但是你还没有关闭应用程序。
如果您的程序以“正常”方式排列,则不会发生这种情况,但如果您故意或偶然地使用了一种不寻常的安排,则可能会发生这种情况。
当然,修复它取决于您如何安排代码。但是,这是一个开始的建议。
关闭应用程序的常用方法是调用wxApp :: OnExit(),这通常在顶级窗口关闭时发生。
你有自己的类,派生自wxApp吗?你有OnExit()的覆盖吗?如果没有,那么就这样做并使用调试器来检查它是否被调用。如果没有被调用,请弄清楚如何确保它被调用。
另一个想法:使用以下内容检查您的顶级窗口是否会关闭应用
bool wxApp :: GetExitOnFrameDelete()const
如果应用程序将在顶级窗口中退出,则返回true 删除,否则为假。
如果返回false,请使用相应的设置。
第三个想法:当有任何顶级窗口打开时,应用程序不会退出。那么也许你有另一个最小化或不可见的顶级窗口但尚未关闭?从这些窗口派生的任何wxDialog或WxFrame或窗口都是顶级窗口,会阻止应用程序关闭。
第四个想法:你是否有应用程序对象的全局或属性,其析构函数可以进入无限循环?在窗口被破坏后调用这些析构函数,如果其中一个不返回,您将看到您描述的行为。
答案 1 :(得分:1)
您可以尝试查看wxWidget的示例文件夹。您会发现许多小而完整的应用程序包含完整的初始/退出应用程序周期。
检查一些样本并与应用程序的工作流程进行比较。
答案 2 :(得分:1)
是的......问题解决了。一个未被销毁的TopLevelWindow。记忆泄漏......愚蠢的错误。