簡體   English   中英

調試復雜的return語句

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM