1- Print to file
To debug Python code it is always possible to print data of variables to a file, with something like this:
f=open('C:/temp/my_debug.txt','a') f.write('hello world\n') f.close()
2- Python embedded in GiD
The scenery of use python in GiD is not usual:
The ‘normal’ case is to run a python.exe process that evaluate the code of a .py python file.
In the ‘normal’ case it is easy to use the Visual Studio Code editor, install the Python extension of Microsoft, and open a .py file, set breakpoints with <F9> and start debugging with <F5> and see the value of variables, stack trace, etc when the flow reaches a break point.
The GiD case run a gid.exe that has embedded a Tcl interpreter and at run time is loaded the tohil package that create an embedded Python interpreter and add Tcl commands to call Python to this interpreter . At run time it is also possible that this Python interpreter import the tohil module that add Python functions to call the Tcl interpreter.
Note: Running python.exe and importing tohil will create a new Tcl interpreter (not related at all with the one embedded in GiD, then GiD commands cannot be used)
It is possible in this case to do a ‘remote debugging’ with Visual Studio Code, connecting the debugger with the embedded Python of a running gid.exe in a host and port (e.g. localhost and 5678)
but before gid must start a server on this host and port calling our Tcl proc GiD_Python_StartDebuggerServer
proc GiD_Python_StartDebuggerServer { } { tohil::import debugpy #tohil::exec "debugpy.log_to('[GidUtils::GetTmp]')" set my_python [file join [gid_filesystem::get_folder_standard scripts] tohil/python/bin/x64/python.exe] #to avoid a bug of debugpy that use sys.executable and try to run another gid.exe!!. see https://github.com/microsoft/debugpy/issues/262 tohil::exec "debugpy.configure(python='$my_python')" tohil::exec "debugpy.listen(5678)" #tohil::exec "debugpy.wait_for_client()" return 0 }
Note: The required Python module debugpy is pre-installed in our tohil’s Python copy
Then open the folder with the .py file in VS Code,
open the file gid_meshing.py and set an stop <F9> in the line np.set_printoptions(threshold=np.inf)
Then click in the lower state bar to set as python interpreter the one of GiD (probably initially points to another Python of our system),
e.g. select
<GiD>\scripts\tohil\python\bin\x64\python.exe
Then start GiD and call GiD_Python_StartDebuggerServer
(e.g. can write -np- GiD_Python_StartDebuggerServer, or un-comment the line of meshio.tcl #GiD_Python_StartDebuggerServer)
And the first time that run the debug in VS Code <F5> it ask the configuration way to debug: select for example attach to remote debug, configuring the host=localhost and port=5678
this information is stored in the file .vscode/launch.json, with a content like this
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Attach localhostt:5678", "type": "python", "request": "attach", "connect": { "host": "localhost", "port": 5678 }, //"processId": "${command:pickProcess}", //"justMyCode": true } ] }
In GiD go to menu Files->Import->Meshio
and select some mesh file, like a Kratos .mdpa file to be imported.
then the debugger will be stopped in our break point and can inspect variables, etc.