繁体   English   中英

使用#line控件时调试器的奇怪行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM