[英](VC 2019) C++ return statement ignored in release configuration, works fine in debug
[英]Debug complex return statement
我使用totalview作為linux C ++調試器。 我們的代碼中的函數通常看起來像這樣
double foo() {
int a = 2;
int b = 3;
return bar(a,b);
}
一些初步工作已經完成,而且一個或多或少復雜的函數bar
被稱為return語句。
使用totalview很難調試,因為無法輕易觀察到有趣的返回值。 Totalview無法評估表達bar(a,b)
。 我可以將代碼重寫為
double foo() {
int a = 2;
int b = 3;
const auto retVal = bar(a,b);
return retVal;
}
現在,我可以在返回值處放置一個斷點,並觀察我的功能bar
的輸入和輸出。
如何在不引入新(無用)變量的情況下執行此操作?
讓編譯器通過一個名為返回值優化的進程來優化“無用”變量,並將其保留。(就個人而言,盡管我會通過顯式使用函數的返回類型而不是auto
來盡可能地幫助編譯器;所以在return
階段沒有潛在的類型轉換。) 對於它的價值,我一直這樣做,即使是像std::vector
這樣的重物。 如果您懷疑編譯器正在制作多余的副本,則可以隨時檢查生成的匯編程序。
然后,您可以根據需要在適當的位置設置斷點。
在某些調試器中,您可以通過查看寄存器來直接檢查函數返回值,但這絕不是通用的。
參考: http : //en.cppreference.com/w/cpp/language/copy_elision
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.