[英]Why does my debugger sometimes freak out and do things like not line up with my code?
[英]Stopping debugger at an optimized out line of code
如果我想停在一個空的代碼塊中,那總是一個問題。
if (...)
{ // I want the debugger to stop here!
}
如果我添加任意一行代碼,這些代碼不影響程序行為,則可能會根據代碼行對其進行優化
if (...)
{
int a;
a = a; // won't work
}
if (...)
{
int a;
int b = a; // will work
}
因此,這里出現兩個問題:
1)什么最簡單的單行代碼不會被優化(但實際上什么也做不了!),可以用來停止調試器? 2)有沒有辦法切換所有優化,以便能夠停在任意代碼行? 編譯器標志-O0不起作用。
足夠好的單行代碼可能是一些有用且有趣的assert
語句,但條件是編譯器無法將其固定折疊。 通常,一些有意義且有用的assert (p!=NULL)
或assert(i>0)
足夠了,其中p
是一些現有的指針變量或形式,或者i
是一些現有的帶符號整數變量或形式。
順便說一句,您處於項目的調試階段,因此添加足夠好的有意義的assert
語句將很有幫助。 當然,您希望包含<cassert>
標頭。
不要忘記,如果使用-DNDEBUG
標志進行編譯,則會跳過assert(3)語句。
您也可以在Linux / x86上使用asm volatile ("nop")
。 注意,調試器需要一些代碼來放置斷點。 您不需要空代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.