簡體   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