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