cs01 / gdbgui

Browser-based frontend to gdb (gnu debugger). Add breakpoints, view the stack, visualize data structures, and more in C, C++, Go, Rust, and Fortran. Run gdbgui from the terminal and a new tab will open in your browser.
https://gdbgui.com
GNU General Public License v3.0
9.89k stars 499 forks source link

Python 3.13 is not supported #494

Open dobairoland opened 3 hours ago

dobairoland commented 3 hours ago

Gdbgui requires a fixed version of greenlet: greenlet==3.0.0. There are fixes for greenlet for Python 3.13, e.g. https://github.com/python-greenlet/greenlet/commit/528b81680cc95a86ab25370ea3f0461384b6d753 which are not in greenlet==3.0.0. Without them the installation of gdbgui fails with the followring error:

Building wheels for collected packages: greenlet
  Building wheel for greenlet (pyproject.toml): started
  Building wheel for greenlet (pyproject.toml): finished with status 'error'
  error: subprocess-exited-with-error

  × Building wheel for greenlet (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [188 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/__init__.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      creating build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/__init__.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      creating build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_version.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_weakref.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_slp_switch.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_gc.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/leakcheck.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_switch_two_greenlets.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_generator.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_greenlet_trash.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_throw.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_tracing.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_cpp_exception.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_switch_three_greenlets.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_cpp.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_contextvars.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_greenlet.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_extension_interface.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_clearing_run_switches.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/__init__.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_switch_three_greenlets2.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/fail_initialstub_already_started.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_generator_nested.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_stack_saved.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/test_leaks.py -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      running egg_info
      writing src/greenlet.egg-info/PKG-INFO
      writing dependency_links to src/greenlet.egg-info/dependency_links.txt
      writing requirements to src/greenlet.egg-info/requires.txt
      writing top-level names to src/greenlet.egg-info/top_level.txt
      reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files found matching 'benchmarks/*.json'
      no previously-included directories found matching 'docs/_build'
      warning: no files found matching '*.py' under directory 'appveyor'
      warning: no previously-included files matching '*.pyc' found anywhere in distribution
      warning: no previously-included files matching '*.pyd' found anywhere in distribution
      warning: no previously-included files matching '*.so' found anywhere in distribution
      warning: no previously-included files matching '.coverage' found anywhere in distribution
      adding license file 'LICENSE'
      adding license file 'LICENSE.PSF'
      adding license file 'AUTHORS'
      writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
      copying src/greenlet/TBrokenGreenlet.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TExceptionState.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TGreenlet.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TGreenletGlobals.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TMainGreenlet.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TPythonState.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TStackState.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TThreadStateDestroy.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/TUserGreenlet.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_allocator.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_compiler_compat.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_cpython_add_pending.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_cpython_compat.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_exceptions.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_greenlet.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_internal.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_refs.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_slp_switch.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_thread_state.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_thread_state_dict_cleanup.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/greenlet_thread_support.hpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/slp_platformselect.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet
      copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_arm64_masm.asm -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_arm64_masm.obj -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_arm64_msvc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_loongarch64_linux.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_mips_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_s390_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x32_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/platform/switch_x86_unix.h -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/platform
      copying src/greenlet/tests/_test_extension.c -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.macosx-14.4-x86_64-cpython-313/greenlet/tests
      running build_ext
      building 'greenlet._greenlet' extension
      creating build/temp.macosx-14.4-x86_64-cpython-313/src/greenlet
      clang++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -I/usr/local/opt/zlib/include -I/Users/espressif/builds/cH9GSDnY/2/idf/idf-constraints/test_venv/include -I/Users/espressif/.pyenv/versions/3.13.0/include/python3.13 -c src/greenlet/greenlet.cpp -o build/temp.macosx-14.4-x86_64-cpython-313/src/greenlet/greenlet.o --std=gnu++11
      In file included from src/greenlet/greenlet.cpp:19:
      In file included from src/greenlet/greenlet_internal.hpp:20:
      In file included from src/greenlet/greenlet_greenlet.hpp:26:
      /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_frame.h:8:4: error: "this header requires Py_BUILD_CORE define"
      #  error "this header requires Py_BUILD_CORE define"
         ^
      In file included from src/greenlet/greenlet.cpp:19:
      In file included from src/greenlet/greenlet_internal.hpp:20:
      In file included from src/greenlet/greenlet_greenlet.hpp:26:
      In file included from /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_frame.h:13:
      /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_code.h:8:4: error: "this header requires Py_BUILD_CORE define"
      #  error "this header requires Py_BUILD_CORE define"
         ^
      In file included from src/greenlet/greenlet.cpp:19:
      In file included from src/greenlet/greenlet_internal.hpp:20:
      In file included from src/greenlet/greenlet_greenlet.hpp:26:
      In file included from /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_frame.h:13:
      In file included from /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_code.h:11:
      /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_lock.h:13:4: error: "this header requires Py_BUILD_CORE define"
      #  error "this header requires Py_BUILD_CORE define"
         ^
      In file included from src/greenlet/greenlet.cpp:19:
      In file included from src/greenlet/greenlet_internal.hpp:20:
      In file included from src/greenlet/greenlet_greenlet.hpp:26:
      In file included from /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_frame.h:13:
      In file included from /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_code.h:12:
      /Users/espressif/.pyenv/versions/3.13.0/include/python3.13/internal/pycore_backoff.h:9:4: error: "this header requires Py_BUILD_CORE define"
      #  error "this header requires Py_BUILD_CORE define"
         ^
      In file included from src/greenlet/greenlet.cpp:19:
      In file included from src/greenlet/greenlet_internal.hpp:20:
      src/greenlet/greenlet_greenlet.hpp:104:9: error: unknown type name '_PyCFrame'
              _PyCFrame* cframe;
              ^
      src/greenlet/greenlet_greenlet.hpp:138:29: error: unknown type name '_PyCFrame'
              void set_new_cframe(_PyCFrame& frame) noexcept;
                                  ^
      src/greenlet/greenlet_greenlet.hpp:629:17: error: cannot initialize object parameter of type 'const greenlet::Greenlet' with an expression of type 'const greenlet::UserGreenlet'
                  if (this->started() || !this->_run_callable) {
                      ^~~~
      In file included from src/greenlet/greenlet.cpp:32:
      src/greenlet/TMainGreenlet.cpp:48:5: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
          this->tp_clear();
          ^~~~
      src/greenlet/TMainGreenlet.cpp:93:9: error: cannot initialize object parameter of type 'const greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
              this->check_switch_allowed();
              ^~~~
      src/greenlet/TMainGreenlet.cpp:96:9: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
              this->release_args();
              ^~~~
      src/greenlet/TMainGreenlet.cpp:100:32: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
          switchstack_result_t err = this->g_switchstack();
                                     ^~~~
      src/greenlet/TMainGreenlet.cpp:104:16: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
              return this->on_switchstack_or_initialstub_failure(
                     ^~~~
      src/greenlet/TMainGreenlet.cpp:125:22: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::MainGreenlet'
          return Greenlet::tp_traverse(visit, arg);
                           ^~~~~~~~~~~
      In file included from src/greenlet/greenlet.cpp:33:
      src/greenlet/TUserGreenlet.cpp:69:9: error: cannot initialize object parameter of type 'const greenlet::Greenlet' with an expression of type 'const greenlet::UserGreenlet'
          if (this->started()) {
              ^~~~
      src/greenlet/TUserGreenlet.cpp:100:22: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::UserGreenlet'
          return Greenlet::throw_GreenletExit_during_dealloc(current_thread_state);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      src/greenlet/TUserGreenlet.cpp:129:9: error: cannot initialize object parameter of type 'const greenlet::Greenlet' with an expression of type 'greenlet::UserGreenlet'
              this->check_switch_allowed();
              ^~~~
      src/greenlet/TUserGreenlet.cpp:132:9: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::UserGreenlet'
              this->release_args();
              ^~~~
      src/greenlet/TUserGreenlet.cpp:146:15: error: cannot initialize a variable of type 'Greenlet *' with an rvalue of type 'greenlet::UserGreenlet *'
          Greenlet* target = this;
                    ^        ~~~~
      src/greenlet/TUserGreenlet.cpp:158:36: error: cannot initialize object parameter of type 'greenlet::Greenlet' with an expression of type 'greenlet::UserGreenlet'
                      target->args() <<= this->args();
                                         ^~~~
      fatal error: too many errors emitted, stopping now [-ferror-limit=]
      20 errors generated.
      error: command '/usr/bin/clang++' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for greenlet

To Reproduce

  1. Install Python 3.13.
  2. pip install gdbgui
dobairoland commented 3 hours ago

https://github.com/cs01/gdbgui/issues/478 is a related issue which is causing that gdbgui dependencies cannot be upgraded to get necessary fixes.