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