| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  Created by Phil on 3/12/2013. | 
					
						
							|  |  |  |  *  Copyright 2013 Two Blue Cubes Ltd. All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | 
					
						
							|  |  |  |  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED
 | 
					
						
							|  |  |  | #define TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "catch_platform.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-29 13:51:55 +02:00
										 |  |  | namespace Catch { | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  |     bool isDebuggerActive(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CATCH_PLATFORM_MAC
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 08:26:08 +01:00
										 |  |  |     #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 14:56:20 +01:00
										 |  |  | #elif defined(CATCH_PLATFORM_LINUX)
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:09:16 +01:00
										 |  |  |     // If we can use inline assembler, do it because this allows us to break
 | 
					
						
							|  |  |  |     // directly at the location of the failing check instead of breaking inside
 | 
					
						
							|  |  |  |     // raise() called from it, i.e. one stack frame below.
 | 
					
						
							|  |  |  |     #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
 | 
					
						
							| 
									
										
										
										
											2017-07-13 08:26:08 +01:00
										 |  |  |         #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:09:16 +01:00
										 |  |  |     #else // Fall back to the generic way.
 | 
					
						
							|  |  |  |         #include <signal.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         #define CATCH_TRAP() raise(SIGTRAP)
 | 
					
						
							|  |  |  |     #endif
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | #elif defined(_MSC_VER)
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |     #define CATCH_TRAP() __debugbreak()
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | #elif defined(__MINGW32__)
 | 
					
						
							|  |  |  |     extern "C" __declspec(dllimport) void __stdcall DebugBreak(); | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |     #define CATCH_TRAP() DebugBreak()
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  | #ifdef CATCH_TRAP
 | 
					
						
							|  |  |  |     #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); }
 | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2017-11-21 21:39:40 +01:00
										 |  |  |     #define CATCH_BREAK_INTO_DEBUGGER() (void)0, 0
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED
 |