| 
									
										
										
										
											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"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Catch{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool isDebuggerActive(); | 
					
						
							|  |  |  |     void writeToDebugConsole( std::string const& text ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CATCH_PLATFORM_MAC
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // The following code snippet based on:
 | 
					
						
							|  |  |  |     // http://cocoawithlove.com/2008/03/break-into-debugger.html
 | 
					
						
							|  |  |  |     #ifdef DEBUG
 | 
					
						
							|  |  |  |         #if defined(__ppc64__) || defined(__ppc__)
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |             #define CATCH_TRAP() \
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  |                     __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |                     : : : "memory","r0","r3","r4" ) | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  |         #else
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |             #define CATCH_TRAP() _asm__("int $3\n" : : )
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  |         #endif
 | 
					
						
							|  |  |  |     #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 14:56:20 +01:00
										 |  |  | #elif defined(CATCH_PLATFORM_LINUX)
 | 
					
						
							|  |  |  |     #include <signal.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-05 15:08:16 +01:00
										 |  |  |     #define CATCH_TRAP() raise(SIGTRAP)
 | 
					
						
							| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |     #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue();
 | 
					
						
							| 
									
										
										
										
											2013-12-03 18:52:41 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED
 |