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