View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0014801CMake(No Category)public2014-03-10 05:172016-06-10 14:31
ReporterMathieu Malaterre 
Assigned ToMathieu Malaterre 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusclosedResolutionmoved 
PlatformOSOS Version
Product VersionCMake 2.8.12.2 
Target VersionFixed in Version 
Summary0014801: CTest: --interactive-debug-mode 0 Debug build type (create_test_sourcelist)
DescriptionFor some reason I cannot get ctest to run in non interactive debug mode, the Windows Visual C++ debugger message box always appears when running tests during my continuous dashboard.

this can be seen on openjpeg dashboard, where the test is flagged as timed-out:
http://my.cdash.org/testDetails.php?test=14010787&build=579601 [^]

You could try on your side:
ctest -R random.*encode --interactive-debug-mode 0 -V

I have also prepared a small examples to reproduce:

$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(heapcor)
add_executable(hc hc.cxx)
enable_testing()
add_test(NAME hc COMMAND hc)
$ cat hc.cxx
int main()
{
  char * p = new char[10];
  for( int i = 0; i < 500; ++i ) p[i] = i;
  delete p;
  return 0;
}


just run and execute.

I am attaching the output of:

ctest --interactive-debug-mode 0 -VV --debug > my.log

OS: Windows Vista Pro 32bits / Visual Studio Express 2010 / CMake 2.8.12.2
TagsNo tags attached.
Attached Fileslog file icon my.log [^] (5,177 bytes) 2014-03-10 05:17

 Relationships

  Notes
(0035374)
Brad King (manager)
2014-03-10 12:37

I cannot reproduce this:

$ ctest --version
ctest version 3.0.0-rc1

$ ctest -C Debug -R hc
(popup appears)

$ ctest --interactive-debug-mode 0 -C Debug -R hc
(popup does not appear)

$ ctest -M Experimental -T Test -C Debug -R hc
(popup does not appear)
(0035375)
Mathieu Malaterre (developer)
2014-03-10 13:07

Ok, that's what I feared.

Anyway for reference on my system (Vista Pro SP2/32bits, Visual Studio Express 2010), I always get a heap corruption doing:

$ cat hc.cxx
#include <windows.h>
int main()
{
  SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
  char * p = new char[10];
  for( int i = 0; i < 500; ++i ) p[i] = i;
  delete p;
  return 0;
}
$ cl hc.cxx
$ cl.exe -> NO message box

however:

$ cl /MDd hc.cxx
$ cl.exe -> message box for heap corruption appear !

Just for info, SetThreadErrorMode is not available on my system.
(0035376)
Mathieu Malaterre (developer)
2014-03-10 13:21

For reference, with:

$ cl /MDd hc.cxx
and
$ cl /MTd hc.cxx

I get a message box. With

$ cl /MD hc.cxx
and
$ cl /MT hc.cxx

I do not get a message box.
(0035378)
Brad King (manager)
2014-03-10 13:47

Re 0014801:0035376: I observe that behavior too: Debug builds get the popup without suppression, Release builds do not get the popup.

The inconsistency is that the suppression works for me.
(0035380)
Mathieu Malaterre (developer)
2014-03-11 04:56

Well that's odd.

For reference (tested on Win7/64bits and Win Vista Pro/32bits), anytime my project is compiled with CMAKE_BUILD_TYPE:Debug I cannot get proper behavior for --interactive-debug-mode 0. All other build type (Release RelWithDebInfo MinSizeRel) are working as expected.

I'll switch the openjpeg dashboard to use RelWithDebInfo.

You can close the issue.
(0035381)
Mathieu Malaterre (developer)
2014-03-11 06:06

BTW, I found other mentions of this issue:

http://stackoverflow.com/questions/14470074/how-to-ignore-windows-debug-error-dialogs-in-automated-tests [^]

Really the CRT debug report should appear on your side when compiling in Debug mode. The only way out (as documented) is:

http://msdn.microsoft.com/en-us/library/0yysf5e6.aspx [^]
(0035382)
Brad King (manager)
2014-03-11 08:57

Re 0014801:0035380: Okay, resolving as "suspended" pending further discoveries.
(0035932)
Mathieu Malaterre (developer)
2014-05-26 15:49

Here is what is missing in cmake code:

#include <crtdbg.h>

int _tmain(int argc, _TCHAR* argv[])
{
    //SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);

ref:
http://stackoverflow.com/questions/22306820/seterrormode-and-mdd-mtd-compile-flag/23853173#23853173 [^]
(0035933)
David Cole (manager)
2014-05-26 16:04

CMake/CTest/CPack do not need CrtSetReportMode calls in them... Your test program does.

The test program is the thing that's popping up the dialog, and then ctest is timing out because there's a dialog waiting for user input.

You should put the CrtSetReportMode calls into your test app to prevent the dialog from popping up if that's what you want to do.
(0035936)
Mathieu Malaterre (developer)
2014-05-27 03:00

thanks david. My initial goal is fairly simple I need to have --interactive-debug-mode 0 behave properly when building in Debug mode. In which case the patch needs to go instead in the cmake: `create_test_sourcelist` code generation.

comments ?
(0035937)
David Cole (manager)
2014-05-27 06:06
edited on: 2014-05-27 06:09

Perhaps something like this in your code before your create_test_sourcelist call:

set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN "
#ifdef _MSC_VER
  _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
  _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
  _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
#endif
")

(from analysis of CMake's Templates/TestDriver.cxx.in ... you may need an extra include, too)

I think it belongs in your project still, not in CMake itself. Perhaps some people want this and others don't. The popup window is very convenient for immediately notifying an interactive user that something is wrong and I would not want to suppress it in general.

(0042505)
Kitware Robot (administrator)
2016-06-10 14:29

Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current CMake Issues page linked in the banner at the top of this page.

 Issue History
Date Modified Username Field Change
2014-03-10 05:17 Mathieu Malaterre New Issue
2014-03-10 05:17 Mathieu Malaterre File Added: my.log
2014-03-10 12:37 Brad King Note Added: 0035374
2014-03-10 13:07 Mathieu Malaterre Note Added: 0035375
2014-03-10 13:21 Mathieu Malaterre Note Added: 0035376
2014-03-10 13:47 Brad King Note Added: 0035378
2014-03-11 04:56 Mathieu Malaterre Note Added: 0035380
2014-03-11 06:06 Mathieu Malaterre Note Added: 0035381
2014-03-11 08:57 Brad King Note Added: 0035382
2014-03-11 08:57 Brad King Status new => resolved
2014-03-11 08:57 Brad King Resolution open => suspended
2014-05-26 15:49 Mathieu Malaterre Assigned To => Mathieu Malaterre
2014-05-26 15:49 Mathieu Malaterre Note Added: 0035932
2014-05-26 15:49 Mathieu Malaterre Status resolved => feedback
2014-05-26 15:49 Mathieu Malaterre Resolution suspended => reopened
2014-05-26 16:04 David Cole Note Added: 0035933
2014-05-27 02:59 Mathieu Malaterre Summary CTest: --interactive-debug-mode 0 => CTest: --interactive-debug-mode 0 Debug build type (create_test_sourcelist)
2014-05-27 03:00 Mathieu Malaterre Note Added: 0035936
2014-05-27 03:00 Mathieu Malaterre Status feedback => assigned
2014-05-27 06:06 David Cole Note Added: 0035937
2014-05-27 06:09 David Cole Note Edited: 0035937
2016-06-10 14:29 Kitware Robot Note Added: 0042505
2016-06-10 14:29 Kitware Robot Status assigned => resolved
2016-06-10 14:29 Kitware Robot Resolution reopened => moved
2016-06-10 14:31 Kitware Robot Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team