143 lines
5.3 KiB
JavaScript
143 lines
5.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Debug script to test the packaged app backend in isolation
|
|
* This helps identify issues with the backend executable in different user environments
|
|
*/
|
|
|
|
const { spawn } = require('child_process');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
function testBackendExecutable(backendPath, testBundlePath) {
|
|
console.log(`\n=== Testing Backend Executable ===`);
|
|
console.log(`Backend path: ${backendPath}`);
|
|
console.log(`Test bundle: ${testBundlePath}`);
|
|
console.log(`Backend exists: ${fs.existsSync(backendPath)}`);
|
|
|
|
if (!fs.existsSync(backendPath)) {
|
|
console.error(`❌ Backend executable not found at: ${backendPath}`);
|
|
return Promise.resolve(false);
|
|
}
|
|
|
|
// Test with inspect_bundle command (same as open-bundle)
|
|
const args = ['inspect_bundle', JSON.stringify({ bundle_path: testBundlePath })];
|
|
console.log(`Command: ${backendPath} ${args.join(' ')}`);
|
|
|
|
return new Promise((resolve) => {
|
|
const process = spawn(backendPath, args);
|
|
let stdoutBuffer = '';
|
|
let stderrBuffer = '';
|
|
|
|
process.stdout.on('data', (data) => {
|
|
stdoutBuffer += data.toString();
|
|
});
|
|
|
|
process.stderr.on('data', (data) => {
|
|
stderrBuffer += data.toString();
|
|
});
|
|
|
|
process.on('close', (code) => {
|
|
console.log(`\n--- Backend Test Results ---`);
|
|
console.log(`Exit code: ${code}`);
|
|
console.log(`Stdout length: ${stdoutBuffer.length}`);
|
|
console.log(`Stderr length: ${stderrBuffer.length}`);
|
|
|
|
if (stdoutBuffer.length > 0) {
|
|
console.log(`\nStdout first 500 chars:`);
|
|
console.log(`"${stdoutBuffer.substring(0, 500)}"`);
|
|
|
|
try {
|
|
const parsed = JSON.parse(stdoutBuffer.trim());
|
|
console.log(`✅ JSON parsing successful`);
|
|
console.log(`Success: ${parsed.success}`);
|
|
} catch (e) {
|
|
console.log(`❌ JSON parsing failed: ${e.message}`);
|
|
console.log(`First problematic character: "${stdoutBuffer.charAt(0)}" (${stdoutBuffer.charCodeAt(0)})`);
|
|
}
|
|
}
|
|
|
|
if (stderrBuffer.length > 0) {
|
|
console.log(`\nStderr output:`);
|
|
console.log(stderrBuffer);
|
|
}
|
|
|
|
resolve(code === 0);
|
|
});
|
|
|
|
process.on('error', (err) => {
|
|
console.error(`❌ Failed to start backend process: ${err.message}`);
|
|
resolve(false);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function main() {
|
|
console.log('=== 4DSTAR Packaged App Debug Tool ===');
|
|
console.log(`Platform: ${process.platform}`);
|
|
console.log(`Architecture: ${process.arch}`);
|
|
console.log(`Node version: ${process.version}`);
|
|
console.log(`Working directory: ${process.cwd()}`);
|
|
|
|
// Get test bundle path from command line or use default
|
|
const testBundlePath = process.argv[2] || '/path/to/test.fbundle';
|
|
|
|
if (!fs.existsSync(testBundlePath)) {
|
|
console.error(`❌ Test bundle not found: ${testBundlePath}`);
|
|
console.log(`Usage: node debug-packaged-app.js <path-to-test-bundle>`);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Test different backend paths
|
|
const backendPaths = [
|
|
// Development path
|
|
path.resolve(__dirname, '..', 'build', 'electron', 'dist', 'fourdst-backend', 'fourdst-backend'),
|
|
// Packaged app path (if running from within app)
|
|
path.join(process.resourcesPath || '', 'backend', 'fourdst-backend'),
|
|
// Alternative packaged paths
|
|
path.join(__dirname, '..', 'resources', 'backend', 'fourdst-backend'),
|
|
path.join(__dirname, 'backend', 'fourdst-backend'),
|
|
];
|
|
|
|
console.log(`\n=== Testing Backend Paths ===`);
|
|
for (const backendPath of backendPaths) {
|
|
console.log(`\nTesting: ${backendPath}`);
|
|
const success = await testBackendExecutable(backendPath, testBundlePath);
|
|
if (success) {
|
|
console.log(`✅ Backend test successful!`);
|
|
break;
|
|
} else {
|
|
console.log(`❌ Backend test failed`);
|
|
}
|
|
}
|
|
|
|
// Environment diagnostics
|
|
console.log(`\n=== Environment Diagnostics ===`);
|
|
console.log(`USER: ${process.env.USER || 'unknown'}`);
|
|
console.log(`HOME: ${process.env.HOME || 'unknown'}`);
|
|
console.log(`PATH: ${process.env.PATH || 'unknown'}`);
|
|
console.log(`PYTHONPATH: ${process.env.PYTHONPATH || 'not set'}`);
|
|
|
|
// Check permissions
|
|
console.log(`\n=== Permission Check ===`);
|
|
for (const backendPath of backendPaths) {
|
|
if (fs.existsSync(backendPath)) {
|
|
try {
|
|
const stats = fs.statSync(backendPath);
|
|
console.log(`${backendPath}:`);
|
|
console.log(` Executable: ${!!(stats.mode & parseInt('111', 8))}`);
|
|
console.log(` Mode: ${stats.mode.toString(8)}`);
|
|
console.log(` Size: ${stats.size} bytes`);
|
|
} catch (e) {
|
|
console.log(`${backendPath}: Permission error - ${e.message}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main().catch(console.error);
|
|
}
|
|
|
|
module.exports = { testBackendExecutable };
|