## Python-C++ Mixed Debugging Configuration in VSCode​

The following `.vscode/launch.json` configuration enables mixed debugging of 
TVM's Python frontend (Python debugger) and C++ backend (GDB) in VSCode.

```json
// .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        /* 
         * Configuration 1: Hybrid Python + C++ Debugging for TVM.
         * Purpose: Debug both Python frontend and C++ backend simultaneously.
         * Mechanism: Launches Python script while attaching to C++ process.
         * Use: This is a hybrid debugging approach, where users should launch
         *      the Python script first, and then the C++ process is 
automatically
         *      attached to.
         * Note:
         *   - Requires `benjamin-simmonds.pythoncpp-debug` (Python C++ 
Debugger)
         *     extension for C++ debugging.
         *   - The following 1.1 and 1.2 configurations are subordinate to this 
configuration.
         */
        {
            "name": "Full Auto Debug (Python+C++)",
            "type": "pythoncpp",
            "request": "launch",
            "pythonLaunchName": "Python: TVM Frontend",
            "cppAttachName": "C++: TVM Backend",
        },
        /*
         * Configuration 1.1: Python Frontend Debugger.
         * Purpose: Debug Python components of TVM.
         */
        {
            "name": "Python: TVM Frontend",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": false,
            "purpose": [
                "debug-in-terminal"
            ],
            "args": [],
            "env": {},
            "gevent": false
        },
        /*
         * Configuration 1.2: C++ Backend Attach Debugger.
         * Purpose: Debug TVM's C++ runtime.
         * Note:
         *   - Customize `"program"` entry to your venv python executable path.
         */
        {
            "name": "C++: TVM Backend",
            "type": "cppdbg",
            "request": "attach",
            // Customize this to your venv python executable path
            "program": "/home/user/miniconda3/envs/tvm-build-venv/bin/python3",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        /*
         * Configuration 2: Pure C++ Debugging.
         * Purpose: Debug standalone C++ executables.
         * Use: When testing C++ components without Python
         * Note:
         *   - Customize `"program"` entry to your C++ executable path.
         */
        {
            "name": "Pure C++ Debug",
            "type": "cppdbg",
            "request": "launch",
            // Customize `"program"` entry to your C++ executable path.
            "program": 
"${workspaceFolder}/oot-tvm-example-project/build/oottvm_test",
            "args": [],
            "cwd": "${workspaceFolder}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
            ],
            "environment": [
                {
                    "name": "EXAMPLEKEY",
                    "value": "EXAMPLEVALUE"
                }
            ]
        },
    ],
}
```

### 1. Required VSCode Extensions

Before using this configuration to debug TVM, we should install the following 
extensions for VSCode:

 - [Python 
Debugger](https://marketplace.visualstudio.com/items?itemName=ms-python.debugpy):
 Search `ms-python.debugpy` in VSCode extension marketplace.
 - 
[C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools):
 Search `ms-vscode.cpptools` in VSCode extension marketplace.
 - [​Python C++ 
Debugger​​](https://marketplace.visualstudio.com/items?itemName=benjamin-simmonds.pythoncpp-debug):
 Search `benjamin-simmonds.pythoncpp-debug` in VSCode extension marketplace.

After installing the extensions, we should copy the `.vscode/launch.json` file 
to the root directory of your own TVM project. And the next steps will explain 
some details that you should modify in the `launch.json` file.

### 2. Debugging Modes​ and Usage

The current configuration supports two debugging modes:

 - Hybrid Python Frontend + C++ Backend Debugging for TVM
 - Pure C++ Backend Debugging for TVM

As the fowllowing image shows, we can choose the debugging mode in graphical 
interface. Ther are four choices:
 - `Full Auto Debug (Python+C++)` is the entry for Hybrid Python Frontend + C++ 
Backend Debugging.
    - `Python: TVM Frontend` is responsible for the debugging of the Python 
Frontend.
    - `C++: TVM Backend` is responsible for the debugging of the C++ Backend.
 - `Pure C++ Debug (C++)` is the entry for Pure C++ Backend Debugging.

![Image](upload://uQIOXi7S8WJlCg6Fnqc6YliiP0t.gif)

#### 2.1 Hybrid Python + C++ Debugging for TVM

This is a hybrid debugging approach, and requires users to first launch the 
Python script, after which the C++ process will be automatically attached.

> IMPORTANT
>
> Customize the `"program"` entry in `.vscode/launch.json` to point to your 
> Python virtual environment executable. Example path:
> > `"program": "/home/user/miniconda3/envs/tvm-build-venv/bin/python3"`
>
> Commands that interact with the Debug Console should be preceded by `-exec`, 
> example:
> > `-exec p pc` or `-exec call tvm::Dump(mod)`

Example:

![Hybrid Debugging Example](upload://q9uPmgdVvXHN0JB7tu1jqcCa4yG.gif)

#### 2.2 Pure C++ Debugging

This is a pure C++ debugging approach, where users can debug C++ components 
without Python scripts.

> IMPORTANT
>
> Customize the `"program"` entry in `.vscode/launch.json` to your C++ 
> executable path.
> Example path:  
> > `"program": "${workspaceFolder}/oot-tvm-example-project/build/oottvm_test"`

Example:

![Image](upload://jbKCdpLov4U4wR8zk4XmqOFMe33.gif)

You can also check `.vscode/launch.json` for debugging mode details - we've 
added extensive comments there.

### 3. Maintenance

This configuration is maintained at: 
https://github.com/anirudhsundar/tvm-gdb-commands





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/seeking-stable-python-c-mixed-debugging-solution-for-tvm/18446/4)
 to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/db6428a1823dfd7ec56cea7dff2f933f1fc64db1c87cf10e3144edc7ba68cf11).

Reply via email to