Xcode断点只有在调试期间设置时才会触发

4
我正在将一个C++ SDK从Windows移植到Mac OSX 10.5。在Xcode中,我遇到了一个问题:只有在调试时设置断点,才能在某些文件中命中它们。如果停止调试,然后重新启动,断点将不再被命中。如果在非调试状态下添加断点,则它们也不会被命中。这仅限于某些文件,我的断点始终是深蓝色的。即我无法区分哪个断点会被命中,哪个不会。

具体来说,我的SDK由各种动态库组成。这些库使用Perforce jam构建,根据我的操作系统和编译器版本(例如Visual Studio的cl.exe和link.exe)调用各种编译和链接可执行文件。我有一个简单的(单元测试)命令行应用程序,链接到这些动态库并调用其中的代码。在Windows上,这个应用程序是一个Visual Studio项目,在其中我设置了库代码的断点,并期望它们被命中。

我已经在Xcode 3.1.2中创建了相同的C++命令行实用程序应用程序,该应用程序链接到SDK dylibs并调用其中的代码。一些断点工作得很好。我可以在从有问题的代码调用的代码中设置断点,然后跳出到有问题的代码,然后可以顺利地逐步执行。有问题的代码编译到与正常工作的代码相同的dylib中。它也足够长和复杂,不适合内联。

我尝试了以下操作:

  • 关闭“懒惰加载符号”选项。
  • 使用gcc 4.0和gcc 4.2进行编译。
  • 进行完整的清理和关闭。
  • 删除xcodeproj包的用户特定文件。
  • 将文件重命名,以避免与系统文件冲突。
  • 清除断点窗口中的所有内容。
  • 创建一个新的Xcode项目。

我的应用程序以DWARF格式进行调试编译,我的库以-g标志(以及-v,-arch i386和-fvisibility-inlines-hidden)进行构建。

非常感谢您的帮助。谢谢。

更新:很抱歉没有更新,我的Mac移植项目被推迟了。我从未解决这个问题,但发现它实际上只发生在构造函数体中。如果再次遇到此问题,我会重新审视它。

2个回答

1

并不是真正的答案:您应该在官方的苹果错误跟踪器中提交一个错误报告。很有可能您会在那里尽早得到答案 - 或者这确实是一个错误。


1

嗨,感谢您的回复。是的,我已经尝试了链接中建议的几乎所有方法,但都没有成功。在两个项目中将-g更改为-gdwarf-2并没有解决问题。删除修复和继续标志也没有用。我的下一步是向苹果报告错误。这真的不应该这么难! - Robin
我仍然有问题,我的断点根本不起作用?你解决了吗? - Irfan Mulic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接