linux C++调试器如何知道如何在源代码和可执行文件之间Map行?

qyswt5oh  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(83)

如果在VisualStudio中的某行旁边放置断点,使用自定义工具生成项目,并运行配置的VS调试器,则调试器如何知道可执行文件中的哪一“行”属于源代码中的断点行?因为编译器可能会在制作可执行文件之前优化代码。

wj8zmpe1

wj8zmpe11#

因为编译器可能会在制作可执行文件之前优化代码。
不,这是一个可扩展构建和一个发布构建之间的巨大差异。
一个调试版本将包含许多关于你的程序的额外信息,而不是执行你的程序所必需的信息。特别是所有的名称、类、函数和变量都在调试版本中。编译器构建是将构建的程序与您编写的代码进行几乎1对1的Map。
您会发现调试优化的程序与调试调试版本有很大的不同。
当你发现一个bug只在优化的发布版本中表现出来时,你就有了一个难题,需要再煮一壶咖啡。

相关问题