我试图用getters / setters调试一个.h文件,但是当我将一个断点放在某些方法上时,当我附加到要调试的进程时,IDE会自动跳过断点到文件中的一个单独的方法。有人知道为什么会发生这种事吗?
有些事我试过了:
这不是一个全面的问题解决方案,我只是偶尔看到这种情况。还有什么我可以试试的吗?
发布于 2012-08-13 16:22:34
考虑点类和矩形类。假设Point有一个名为GetX()的getter,而那个矩形有一个名为GetLeft()的getter。在机器指令级别,这两种方法可能是相同的,因为它们都返回对象中的前32位值。
由于代码是相同的,编译器和/或链接器可以通过丢弃方法的一个副本并将对丢弃的方法的所有调用解析为对保留的方法的调用来减小二进制文件的大小。例如,链接器可能会从可执行文件中删除矩形::GetLeft(),并将对Rect::GetLeft()的所有调用替换为对Point::GetX()的调用。
当发生这种情况时,调试器将无法再区分GetX()和GetLeft()。即使调用是Rect::GetLeft(),指令指针也在属于Point::GetX()的代码范围内。您可以通过查找堆栈来查看实际调用了哪种方法来区分两者之间的区别,但是调试器不会为您这样做。
通常,您构建调试版本时禁用了优化,以避免这种类型的调试混乱。这并不总是可能的。例如,您可能正在调试运行优化二进制文件的客户的崩溃转储。在这种情况下,您只需了解问题并了解调用上下文,就可以知道到底发生了什么。
https://stackoverflow.com/questions/11936514
复制相似问题