Skip to content

Implement Debug Command #516

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Mar 19, 2025
Merged

Implement Debug Command #516

merged 9 commits into from
Mar 19, 2025

Conversation

PeteBishwhip
Copy link
Member

@PeteBishwhip PeteBishwhip commented Mar 13, 2025

This pull request introduces a new DebugCommand to generate debug information for opening issues and updates the NativeServiceProvider to include this command. The most important changes are summarized below:

New Command Addition:

  • src/Commands/DebugCommand.php: Introduced a new DebugCommand class to generate debug information, including environment data, NativePHP data, and error log data. The command supports output to file, clipboard, or console.

Service Provider Update:

@PeteBishwhip
Copy link
Member Author

An example of a nativephp_debug.json file generated on my machine:

{
    "Environment": {
        "PHP": {
            "Version": "8.3.17",
            "Path": "/Users/pete/Library/Application Support/Herd/bin/php83"
        },
        "Laravel": {
            "Version": "12.2.0",
            "ConfigCached": false,
            "DebugEnabled": true
        },
        "Node": {
            "Version": "v22.11.0",
            "Path": "/Users/pete/Library/Application Support/Herd/config/nvm/versions/node/v22.11.0/bin/node"
        },
        "NPM": {
            "Version": "10.9.0",
            "Path": "/Users/pete/Library/Application Support/Herd/config/nvm/versions/node/v22.11.0/bin/npm"
        },
        "OperatingSystem": "Darwin"
    },
    "NativePHP": {
        "Versions": {
            "nativephp/electron": "dev-main",
            "nativephp/laravel": "dev-main",
            "nativephp/php-bin": "0.6.0.0"
        },
        "Configuration": {
            "Provider": "App\\Providers\\NativeAppServiceProvider",
            "BuildHooks": {
                "Pre": [],
                "Post": []
            },
            "NotarizationEnabled": false,
            "CustomPHPBinary": false
        }
    },
    "ErrorLog": [
        "[2025-03-13 11:28:03] local.ERROR: Command \"native:debug\" is not defined.\n\nDid you mean one of these?\n    native:build\n    native:db:seed\n    native:install\n    native:migrate\n    native:migrate:fresh\n    native:publish\n    native:serve {\"exception\":\"[object] (Symfony\\\\Component\\\\Console\\\\Exception\\\\CommandNotFoundException(code: 0): Command \\\"native:debug\\\" is not defined.\n\nDid you mean one of these?\n    native:build\n    native:db:seed\n    native:install\n    native:migrate\n    native:migrate:fresh\n    native:publish\n    native:serve at /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php:726)\n[stacktrace]\n#0 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(284): Symfony\\\\Component\\\\Console\\\\Application->find('native:debug')\n#1 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(193): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#2 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#3 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#4 /Users/pete/Code/NativeCliDev/artisan(16): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#5 {main}\n\"}\n",
        "[2025-03-13 11:28:31] local.ERROR: Too few arguments to function Native\\Laravel\\Commands\\DebugCommand::Native\\Laravel\\Commands\\{closure}(), 1 passed and exactly 2 expected {\"exception\":\"[object] (ArgumentCountError(code: 0): Too few arguments to function Native\\\\Laravel\\\\Commands\\\\DebugCommand::Native\\\\Laravel\\\\Commands\\\\{closure}(), 1 passed and exactly 2 expected at /Users/pete/Documents/Development/NativePHP/laravel/src/Commands/DebugCommand.php:43)\n[stacktrace]\n#0 [internal function]: Native\\\\Laravel\\\\Commands\\\\DebugCommand->Native\\\\Laravel\\\\Commands\\\\{closure}(NULL)\n#1 /Users/pete/Documents/Development/NativePHP/laravel/src/Commands/DebugCommand.php(42): array_map(Object(Closure), Array)\n#2 /Users/pete/Documents/Development/NativePHP/laravel/src/Commands/DebugCommand.php(23): Native\\\\Laravel\\\\Commands\\\\DebugCommand->processNativePHP()\n#3 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Native\\\\Laravel\\\\Commands\\\\DebugCommand->handle()\n#4 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\\\\Container\\\\BoundMethod::Illuminate\\\\Container\\\\{closure}()\n#5 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\\\\Container\\\\Util::unwrapIfClosure(Object(Closure))\n#6 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\\\Container\\\\BoundMethod::callBoundMethod(Object(Illuminate\\\\Foundation\\\\Application), Array, Object(Closure))\n#7 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Container/Container.php(754): Illuminate\\\\Container\\\\BoundMethod::call(Object(Illuminate\\\\Foundation\\\\Application), Array, Array, NULL)\n#8 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Console/Command.php(213): Illuminate\\\\Container\\\\Container->call(Array)\n#9 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Command/Command.php(279): Illuminate\\\\Console\\\\Command->execute(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#10 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#11 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(1094): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#12 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(342): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Native\\\\Laravel\\\\Commands\\\\DebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#13 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(193): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#14 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#15 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#16 /Users/pete/Code/NativeCliDev/artisan(16): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#17 {main}\n\"}\n",
        "[2025-03-13 12:26:20] local.ERROR: Not enough arguments (missing: \"{--output=\"). {\"exception\":\"[object] (Symfony\\\\Component\\\\Console\\\\Exception\\\\RuntimeException(code: 0): Not enough arguments (missing: \\\"{--output=\\\"). at /Users/pete/Code/NativeCliDev/vendor/symfony/console/Input/Input.php:69)\n[stacktrace]\n#0 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Command/Command.php(274): Symfony\\\\Component\\\\Console\\\\Input\\\\Input->validate()\n#1 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#2 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(1094): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#3 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(342): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Native\\\\Laravel\\\\Commands\\\\DebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#4 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(193): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#5 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#6 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#7 /Users/pete/Code/NativeCliDev/artisan(16): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#8 {main}\n\"} \n",
        "[2025-03-13 12:27:21] local.ERROR: Not enough arguments (missing: \"output\"). {\"exception\":\"[object] (Symfony\\\\Component\\\\Console\\\\Exception\\\\RuntimeException(code: 0): Not enough arguments (missing: \\\"output\\\"). at /Users/pete/Code/NativeCliDev/vendor/symfony/console/Input/Input.php:69)\n[stacktrace]\n#0 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Command/Command.php(274): Symfony\\\\Component\\\\Console\\\\Input\\\\Input->validate()\n#1 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#2 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(1094): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#3 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(342): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Native\\\\Laravel\\\\Commands\\\\DebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#4 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(193): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#5 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#6 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#7 /Users/pete/Code/NativeCliDev/artisan(16): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#8 {main}\n\"} \n",
        "[2025-03-13 12:59:12] local.ERROR: Not enough arguments (missing: \"output\"). {\"exception\":\"[object] (Symfony\\\\Component\\\\Console\\\\Exception\\\\RuntimeException(code: 0): Not enough arguments (missing: \\\"output\\\"). at /Users/pete/Code/NativeCliDev/vendor/symfony/console/Input/Input.php:69)\n[stacktrace]\n#0 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Command/Command.php(274): Symfony\\\\Component\\\\Console\\\\Input\\\\Input->validate()\n#1 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Symfony\\\\Component\\\\Console\\\\Command\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Illuminate\\\\Console\\\\OutputStyle))\n#2 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(1094): Illuminate\\\\Console\\\\Command->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#3 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(342): Symfony\\\\Component\\\\Console\\\\Application->doRunCommand(Object(Native\\\\Laravel\\\\Commands\\\\DebugCommand), Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#4 /Users/pete/Code/NativeCliDev/vendor/symfony/console/Application.php(193): Symfony\\\\Component\\\\Console\\\\Application->doRun(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#5 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\\\\Component\\\\Console\\\\Application->run(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#6 /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1235): Illuminate\\\\Foundation\\\\Console\\\\Kernel->handle(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput), Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\n#7 /Users/pete/Code/NativeCliDev/artisan(16): Illuminate\\\\Foundation\\\\Application->handleCommand(Object(Symfony\\\\Component\\\\Console\\\\Input\\\\ArgvInput))\n#8 {main}\n\"} \n",
        "[2025-03-13 13:24:02] local.ERROR: cURL error 7: Failed to connect to localhost port 4000 after 0 ms: Could not connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://localhost:4000/api/clipboard/text {\"exception\":\"[object] (Illuminate\\\\Http\\\\Client\\\\ConnectionException(code: 0): cURL error 7: Failed to connect to localhost port 4000 after 0 ms: Could not connect to server (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://localhost:4000/api/clipboard/text at /Users/pete/Code/NativeCliDev/vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php:941)\n"
    ]
}

@PeteBishwhip PeteBishwhip marked this pull request as ready for review March 13, 2025 13:36
Copy link
Member

@simonhamp simonhamp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great and I can see it being super useful, so I'm very keen to get this in for v1

@PeteBishwhip PeteBishwhip added this to the v1 milestone Mar 13, 2025
@PeteBishwhip PeteBishwhip requested a review from simonhamp March 14, 2025 10:11
@PeteBishwhip PeteBishwhip requested a review from a team March 18, 2025 10:16
Copy link
Member

@simonhamp simonhamp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@PeteBishwhip PeteBishwhip requested a review from a team March 18, 2025 14:34
@PeteBishwhip PeteBishwhip merged commit b8a753a into main Mar 19, 2025
44 checks passed
@PeteBishwhip PeteBishwhip deleted the feature/support-command branch March 19, 2025 13:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants