簡體   English   中英

調試與發布

[英]Debug vs Release

我有以下代碼:

#pragma optimize("", off)

DG704API_API bool DIG704IsUSBEx(IN BYTE rack)
{
volatile bool retVal(true);

  try
  {
    // Validate rack
    if ((rack < 1) || (rack > gpData.num70X))
    {
      OutputDebugMsg(DBG_ERROR_LEVEL, "DIG704IsUSBEx: rack out of hardware range");
      throw (ERROR_INVALID_RACK);  // Throw rack error
    }

    // The DIG-704s should always be first in the list
    if (rack <= ((BYTE)gpData.num704))
      retVal = false;               // We are a DIG-704 so return false

    if (retVal)
      OutputDebugMsg(DBG_INFO_LEVEL, "Rack %d is a DIG-705", rack);
    else
      OutputDebugMsg(DBG_INFO_LEVEL, "Rack %d is a DIG-704", rack);
  }
  catch(int error)
  {
    retVal = false;
  }

  return (retVal);
}

#pragma optimize("", on)

在調試模式下,如果卡是 DIG-704,則返回 false。 在釋放模式下,如果卡是 DIG-704,它返回真。

在我使用的軟件/硬件中,我有一個 DIG-704。 機架 = 1 gpData.num704 = 1

它應該返回 false,但是當我查看返回的值時,它是 true,當我單步執行代碼時,它會跳過 retVal = false; 行。 沒有異常被拋出。

gpData 是一種對整個程序有效的全局數據結構。 num704 被聲明為 int。

我的第一個猜測是代碼正在優化,所以我試圖關閉優化,但添加 #pragma 和 volatile 沒有影響。

我不知道接下來要嘗試什么。

問題不在於函數。 問題在於調用該函數的 Pascal 代碼。 對於函數聲明,我有:

函數 DIG704IsUSBEx(rack: BYTE): Bool; cdecl; 外部“DG704API.dll”;

它必須是:

函數 DIG704IsUSBEx(rack: BYTE): Boolean; cdecl; 外部“DG704API.dll”;

我想我沒有提供足夠的信息讓任何人回答這個問題。 我盡力了,我不認為 Pascal 是問題所在,因為當我在 Release 模式下逐步執行該函數時,我看到它只是跳過了代碼。

感謝所有試圖提供幫助的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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