我正在调试一个仅在从 Dock 启动应用程序时出现的 OS X 问题。当应用程序从命令行启动时,这种情况不会发生。这两种情况之间有什么区别?我正在使用的代码是基于 C++ 的捆绑插件,正在第三方应用程序中加载。我已经在两种情况下使用 GDB 进行了连接,我能看到的唯一区别是在从命令行运行时加载了一些额外的 dylibs,并且我的库的基址在这两种情况下略有不同。我已尝试将链接方式更改为-prebind和/或-bind_at_load,但没有效果。
free()
或delete
之后使用指针或类的字段。
看起来应用程序包与不同的free/delete
实现动态链接,这些实现会将已释放的内存清零/修改。
这种错误可能不会在其他平台/编译器(例如Linux/gcc、Windows/Visual Studio、macOS/clang命令行)上出现,并且只有在从应用程序包(macOS/clang从Finder/dock)执行程序时才会出现。