1- Print to file
To debug Python code it is always possible to print data of variables to a file, with something like this:
Code Block |
---|
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
{
// 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.
...