C++ 调试与发布
我有以下代码:C++ 调试与发布,c++,C++,我有以下代码: #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, "DIG704IsUS
#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,则返回true
在我使用的软件/硬件中,我有一个DIG-704。
机架=1
gpData.num704=1
它应该返回false,但是当我查看返回的值时,它是true,当我逐步遍历代码时,它跳过retVal=false行;没有引发任何异常
gpData是一种数据结构,对整个程序来说是有效的全局数据结构。num704被声明为int
我的第一个猜测是代码正在优化,所以我尝试关闭优化,但添加pragma和volatile没有任何影响
我不知道下一步要尝试什么。问题不在于函数。问题在于调用函数的Pascal代码。对于函数声明,我有: 函数DIG704IsUSBExrack:BYTE:Bool;cdecl;外部“DG704API.dll” 它必须是: 函数DIG704IsUSBExrack:BYTE:Boolean;cdecl;外部“DG704API.dll” 我想我没有为任何人提供足够的信息来回答这个问题。我尽了最大努力,但我不认为Pascal是问题所在,因为当我在Release模式下遍历函数时,我看到它只是跳过了代码
感谢所有试图提供帮助的人。我的第一个猜测是初始化。在调试模式下,内存将填充一个值。在发行版中,它不是并且应该被视为随机垃圾值,尽管操作系统可能会将添加到进程中的所有新内存归零,这与调试填充非常不同。然而,调试和发布之间可能还有许多其他的区别。缺少必要的内容和对我们所讨论的环境类型的一些解释。从CamelCase和pragma的自由应用来看,我怀疑VisualStudio,我猜DIG-704指的是某种硬件?什么是volatile bool retValtrue;?你用的是什么工具链?您是否比较了DIG704IsUSBEx的程序集(有优化和没有优化)?gpData是否标记为volatile?我相信对于任何不包括猜测的帮助,您必须包含更多的代码上下文。我希望我们无法访问您正在使用的任何硬件,但我认为提供的代码量还不够。