[英]Strange behavior of debugger when #line control is used
我使用下面的代码并尝试通过按F10在Visual Studio 2008中进行调试。
//test.cpp
#include<iostream>
using namespace std;
int main(void)
{
#line 100 "test.cpp"
cout<<"Inside main()"<<endl;
return 0;
}
下面是调试器屏幕截图。
#line 100告诉编译器转到第100行以获取其下一行。 由于第100行不存在,它将超出主要功能,如屏幕截图所示。 如果我尝试用F10调试代码,控制永远不会回到主函数。 它继续显示主函数外部的指针,即使它正在执行main()。
如果我给其他文件名代替test.cpp,指针将转到该文件,但它不会返回test.cpp
知道为什么调试器的行为是这样的吗?
代码生成器应该使用该指令。 从一种语言翻译成另一种语言的工具。 因此,当您调试该代码时,调试器将显示原始语言的源文件,逐步执行该语言的语句。 而不是翻译代码中的(通常是神秘的)语句。
这不是你在这里做的,你在指令中给出了无意义的信息。 当你调试时,显然得到了无意义的结果。 Gigo,垃圾进,垃圾出来。 删除指令。
该指令不会改变实际的控制流程。 它会改变编译期间编译器生成的输出。 阅读文档 - 这是否解释了为什么您会期望上述行为?
对于C# ,提到了从调试器中隐藏代码行,但这仍然不会改变预期的控制流。
在两种语言中,您必须在选择所需的下一行代码后使用“Set Next Statement”手动更改执行流程。 设置要在当前范围之外执行的下一行代码可能会导致程序出现故障 - 引用的文档中还有其他警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.