繁体   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