为什么TRACE()会引发浮点下溢异常?

时间:2018-02-09 12:21:36

标签: c++ visual-studio visual-studio-2015 mfc

为什么我在TRACE中得到浮点下溢(参数:0x00000000)? 我需要什么格式说明符?

// show load progress by callback-Funktion (on Statusbar)
ULONGLONG len =  1000;   // ar.GetFile()->GetLength();
ULONGLONG pos =  800;    // ar.GetFile()->GetPosition();
double perc = (double)pos/(double)len*100; 

TRACE("load from %X, Position: %ld, Length: %ld, Perc: %lf \n", 
    this, pos, len, perc ); 

更新

lenpos无关紧要,TRACE始终在调试模式中引发错误。 使用使用多字节字符集编译。将代码从VS9升级到VS14。在发布模式中,似乎工作正常。

调试输出是:

Natvis: Parsing natvis xml file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\windows.media.natvis.
Natvis: Parsing natvis xml file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\windows.natvis.
Natvis: Parsing natvis xml file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\winrt.natvis.
Natvis: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\atlmfc.natvis(9,28): Successfully parsed expression 'm_hWnd' in type context 'CWnd'.
Exception thrown at 0x5B4EE469 (ucrtbased.dll) in TestProgD.exe: 0xC0000093: Floating-point underflow (parameters: 0x00000000).
Unhandled exception at 0x5B4EE469 (ucrtbased.dll) TestProgD.exe: 0xC0000093: Floating-point underflow (parameters: 0x00000000).

1 个答案:

答案 0 :(得分:3)

格式说明符与参数类型不匹配,因此您有未定义的行为。

  • %Xunsigned int)应为%p(指针)。
  • %ldlong int)应为%lluunsigned long long)。在Windows平台上long intint相同,因此无论代码是为32位还是64位构建,它始终为32位。只有long long始终为64位。当然,您还希望匹配签名,这就是必须使用u说明符的原因。

Reference