Отладить проблему в tk85.dll в приложении, которое встраивает интерпретатор Python - PullRequest
17 голосов
/ 25 марта 2010

Мое приложение C ++ встраивает интерпретатор Python, но, похоже, у него возникают некоторые проблемы, когда оно выключается. Сразу после закрытия главного окна я получаю ошибку сегментации (это Windows, но мы все равно будем называть ее ошибкой сегментации). Трассировка стека ниже:

#0 102AD580 tk85!Tk_MainWindow() (C:\Users\... 1.3\bin\Debug\lib\tk85.dll:??)
#1 103082DD tk85!XSetStipple() (C:\Users\... 1.3\bin\Debug\lib\tk85.dll:??)
#2 102214A3 ??() (C:\Users\...1.3\bin\Debug\lib\tk85.dll:??)
#3 10220000 ??() (??:??)
#4 00000000 ??() (??:??)

С чего бы мне начать отлаживать эту проблему? Это кажется воспроизводимым.

1 Ответ

0 голосов
/ 27 марта 2019

Во-первых, я сообщаю вам, что Я идентифицировал условия гонки в Tkinter Python при использовании с нерезьбовым Tcl / Tk (Py2 поставляется с этим) и предложил исправление . Я не уверен, что исправил все возможные условия гонки, но я исправил все, с чем столкнулся.

Теперь, чтобы иметь возможность отлаживать проблемы Tcl / Tk, вам нужно собрать Python с отладочной версией Tcl / Tk и внедрить его. Это должно дать вам возможность заглянуть в tk*.dll в отладчике и посмотреть, что не так.

  • Получите исходный код для вашей версии Python и внесите следующие изменения:

    --- a/PCbuild/prepare_tcltk.bat
    +++ b/PCbuild/prepare_tcltk.bat
    @@ -46,10 +46,10 @@ rem if ERRORLEVEL 1 (echo Cannot locate python.exe on PATH or as PYTHON variable
    
     call "%PCBUILD%\get_externals.bat" --tkinter-src %ORG_SETTING%
    
    -%MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Release /p:Platform=Win32
    -%MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Release /p:Platform=Win32
    -%MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Release /p:Platform=Win32
    +%MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Debug /p:Platform=Win32
    +%MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Debug /p:Platform=Win32
    +%MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Debug /p:Platform=Win32
    
    -%MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Release /p:Platform=x64
    -%MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Release /p:Platform=x64
    -%MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Release /p:Platform=x64
    +%MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Debug /p:Platform=x64
    +%MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Debug /p:Platform=x64
    +%MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Debug /p:Platform=x64
    
  • запустить PCBuild\prepare_tcltk.bat из командной строки VS, чтобы загрузить и собрать Tcl / Tk из источника

  • Теперь соберите отладочный Python как обычно (PCBuild\readme.txt содержит инструкции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...