为什么断点在 .h 文件中跳来跳去
Why do breakpoints jump around in .h files?
我正在尝试使用 getters/setter 调试 .h 文件,但是在附加到我要调试的进程时,当我在某些方法上放置断点时,IDE 会自动将断点跳转到文件中的单独方法。 有谁知道为什么会发生这种情况?
我尝试过的一些事情:
- 重新生成并链接我正在调试.exe
- 删除 .obj 文件,并重新制作包含我要调试的文件的目录
- 已与任务管理器进行检查以确保正在运行正确的.exe
- 检查了.pdb和.exe文件的时间戳,以确保它们(大致)匹配
这不是整个解决方案的问题;我只是偶尔看到这个。 还有什么我可以尝试的吗?
考虑一个点类和一个矩形类。 想象一下,Point有一个名为GetX()的getter,而Rectangle有一个名为GetLeft()的getter。 在机器指令级别,这两个方法可能是相同的,因为它们都返回对象中的第一个 32 位值。
由于代码是相同的,编译器和/或链接器可以通过丢弃方法的一个副本并将对丢弃的方法的所有调用解析为对保留副本的调用来减小二进制文件的大小。 例如,链接器可能会从可执行文件中删除 Rectangle::GetLeft(),并将所有对 Rect::GetLeft() 的调用替换为对 Point::GetX() 的调用。
发生这种情况时,调试器无法再区分 GetX() 和 GetLeft()。 即使调用的是 Rect::GetLeft(),指令指针也在属于 Point::GetX() 的代码范围内。 您可以通过查找堆栈以查看实际调用的方法来区分差异,但调试器不会为您执行此操作。
通常,在禁用优化的情况下生成调试版本,以避免此类调试混淆。 这并不总是可能的。 例如,您可能正在调试来自运行优化二进制文件的客户的故障转储。 在这种情况下,您只需要了解问题并了解调用上下文即可了解实际情况。
相关文章:
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 通过递增字符来加密文本文件
- C++如何通过忽略每行的第一个字符来读取 unicode 文件
- 为什么我不能将 Windows 环境路径与 ofstream 一起使用来编写文本文件?
- 如何在 c++ 中跳过读取 csv 文件的第一列
- 如何使用Python脚本或其他一些方法来美化所有文件
- 在此任务上遇到麻烦,我们需要使用指针和数组来找到文本文件中某些数字的平均值,中值和模式
- 在开关盒循环中使用未删除的标识符来解析 CSV 文件
- 在C++中,我可以使用函数指针表来跳转(而不是调用)函数
- 需要正则表达式来提取zip文件中的所有文件
- 有没有一种优雅的方法来读取二进制文件并将其内容复制到向量<int>
- 参考Abaqus C++API静态库来读取ODB文件
- 我如何编写一个脚本来创建.cpp文件,其中包含所有标题内容
- 需要一个音频分析库来从音频文件中创建实时反馈
- 使用链接列表实现stack类来验证XML文件
- 通过用户获取 cin 来命名输出文件
- 如何使用Python绑定到Clang来解析单个文件
- 在C++中使用字符串::getline跳过行读取文件
- 为什么断点在 .h 文件中跳来跳去
- 如何跳过包括头文件到特定的C/CPP文件