#!/usr/bin/env python3 """ Monitor probe_256_final.exe for crash at cycle ~1112. Capture logs, analyze patterns, identify crash cause. """ import subprocess import time import re import os from datetime import datetime def monitor_for_crash(): """Run probe_256 and capture crash details.""" print("="*70) print("CRASH ANALYTICS - Monitoring for cycle 1112 crash") print(f"Start time: {datetime.now().strftime('%H:%M:%S')}") print("="*70) # Start process proc = subprocess.Popen( [".\\probe_256_final.exe"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=1, universal_newlines=True ) print("Monitoring process...") print("Looking for crash at cycle ~1112 (Probe C: SILENT)") print("-"*70) # Capture variables crash_data = { "last_cycle": 0, "last_output": "", "crash_cycle": None, "crash_time": None, "error_message": "", "probe_state": "---", "pre_crash_patterns": [] } cycle_pattern = re.compile(r'^\s*(\d+)\s*\|\s*(\d+:\d+:\d+)\s*\|') probe_pattern = re.compile(r'\|\s*(INJ|SHEAR|SILENT|TRAP)\s*$') try: while True: line = proc.stdout.readline() if line: # Check for cycle number cycle_match = cycle_pattern.search(line) if cycle_match: cycle = int(cycle_match.group(1)) crash_data["last_cycle"] = cycle # Check probe state probe_match = probe_pattern.search(line) if probe_match: probe_state = probe_match.group(1) crash_data["probe_state"] = probe_state if probe_state == "SILENT" and cycle >= 1100: print(f"āš ļø ENTERED SILENT PROBE ZONE: Cycle {cycle}") crash_data["pre_crash_patterns"].append({ "cycle": cycle, "state": "SILENT", "line": line.strip() }) # Check for error indicators error_indicators = [ "error", "Error", "ERROR", "exception", "Exception", "EXCEPTION", "fatal", "Fatal", "FATAL", "segmentation", "Segmentation", "access violation", "Access violation", "cudaError", "CUDA error", "nvmlError", "NVML error" ] for indicator in error_indicators: if indicator in line: print(f"šŸ”“ ERROR INDICATOR: {indicator} in line") crash_data["error_message"] += line # Save last 10 lines before potential crash if len(crash_data["pre_crash_patterns"]) > 10: crash_data["pre_crash_patterns"].pop(0) crash_data["pre_crash_patterns"].append({ "cycle": crash_data["last_cycle"], "line": line.strip()[:100] }) # Monitor for crash zone (cycles 1100-1200) if 1100 <= cycle <= 1200: print(f"🚨 CRASH ZONE: Cycle {cycle}, Probe: {crash_data['probe_state']}") # Check for specific patterns that might cause crash if "omega locked" in line or "VRM" in line: print(f" VRM/SILENT pattern detected: {line.strip()[:50]}...") # Check if process died if proc.poll() is not None: crash_data["crash_cycle"] = crash_data["last_cycle"] crash_data["crash_time"] = datetime.now().strftime('%H:%M:%S') crash_data["exit_code"] = proc.returncode print(f"\nšŸ’„ PROCESS EXITED: Cycle {crash_data['crash_cycle']}") print(f" Exit code: {proc.returncode}") print(f" Time: {crash_data['crash_time']}") print(f" Probe state: {crash_data['probe_state']}") # Read stderr for error messages stderr_output = proc.stderr.read() if stderr_output: crash_data["error_message"] += "\nSTDERR:\n" + stderr_output break # Small sleep to prevent CPU hogging time.sleep(0.01) except KeyboardInterrupt: print("\n\nMonitoring stopped by user") proc.terminate() # Analysis print("\n" + "="*70) print("CRASH ANALYSIS REPORT") print("="*70) if crash_data["crash_cycle"]: print(f"Crash confirmed at cycle: {crash_data['crash_cycle']}") print(f"Exit code: {crash_data.get('exit_code', 'N/A')}") print(f"Probe state: {crash_data['probe_state']}") # Analyze crash pattern if 1100 <= crash_data["crash_cycle"] <= 1199: print("\nšŸ” CRASH IN SILENT PROBE (cycles 1100-1199)") print(" Probe C: VRM Silence (omega locked to 1.25)") print(" Possible causes:") print(" 1. GPU memory error during omega lock") print(" 2. CUDA kernel failure with locked parameters") print(" 3. Numerical instability at fixed omega=1.25") print(" 4. Buffer overflow in VRM silence logic") elif crash_data["crash_cycle"] == 800: print("\nšŸ” CRASH IN SHEAR PROBE (cycle 800)") print(" Probe B: Lattice Shear (top 25% rotated 90°)") elif 600 <= crash_data["crash_cycle"] <= 649: print("\nšŸ” CRASH IN INJECTION PROBE (cycles 600-649)") print(" Probe A: Metabolic Injection (+mass)") else: print(f"\nšŸ” CRASH AT UNEXPECTED CYCLE: {crash_data['crash_cycle']}") # Show error messages if crash_data["error_message"]: print(f"\nšŸ“„ ERROR MESSAGES:") print(crash_data["error_message"][:500] + "..." if len(crash_data["error_message"]) > 500 else crash_data["error_message"]) # Show last few lines before crash print(f"\nšŸ“ LAST 5 LINES BEFORE CRASH:") for i, pattern in enumerate(crash_data["pre_crash_patterns"][-5:]): print(f" Cycle {pattern['cycle']}: {pattern['line']}") else: print("No crash detected (process may still be running)") # Recommendations print("\n" + "="*70) print("RECOMMENDATIONS") print("="*70) if crash_data.get("exit_code") == 1 and 1100 <= crash_data.get("crash_cycle", 0) <= 1199: print("1. āš ļø SILENT PROBE BUG CONFIRMED") print(" - Crash occurs in VRM Silence (omega locked 1.25)") print(" - Need to examine SILENT probe implementation") print(" - Possible fix: Remove or modify omega locking") print("\n2. IMMEDIATE ACTIONS:") print(" a) Check probe_256.cu lines for SILENT probe logic") print(" b) Look for 'omega = 1.25' or similar hardcoded values") print(" c) Check CUDA error handling in VRM silence") print(" d) Consider removing SILENT probe for stability") print("\n3. WORKAROUNDS:") print(" a) Run without probes (continuous operation)") print(" b) Modify MAX_CYCLES to stop before 1100") print(" c) Fix SILENT probe implementation") elif crash_data.get("exit_code") == 0: print("āœ… Process exited cleanly (no crash)") print(" - May have completed all 1700 cycles") print(" - Or was terminated externally") else: print("ā“ Unknown crash pattern") print(" - Need more data") print(" - Run again with full debug output") # Save crash data import json with open("crash_analysis.json", "w") as f: json.dump(crash_data, f, indent=2) print(f"\nšŸ“ Crash data saved to: crash_analysis.json") return crash_data if __name__ == "__main__": print("Starting crash analytics...") print("This will run probe_256_final.exe and monitor for crash at cycle ~1112") print("Press Ctrl+C to stop early") print("-"*70) data = monitor_for_crash() print("\n" + "="*70) print("ANALYTICS COMPLETE") print("="*70)