mapillary / OpenSfM

Open source Structure-from-Motion pipeline
https://www.opensfm.org/
BSD 2-Clause "Simplified" License
3.37k stars 856 forks source link

Visual Studio Code can't debug #991

Open MikhailMashukov opened 1 year ago

MikhailMashukov commented 1 year ago

I am trying to get call stack and variables' state inside OpenSfM (in particular in bundle_adjuster.cc / BundleAdjuster::Run) with VS Code debugger. So I added

def configure_c_extension(): """Configure cmake project to C extension.""" ... if sys.platform == "win32": cmake_command += [ "-DVCPKG_TARGET_TRIPLET=x64-windows", "-DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake", ] else: cmake_command += ["-DCMAKE_BUILD_TYPE=RelWithDebInfo"] subprocess.check_call(cmake_command, cwd=targetDirName)

into setup.py and rebuilt. Produced opensfm/py* are very big, e.g. pybundle.cpython-38-x86_64-linux-gnu.so is 120 MB now, while before it was 1.3 MB. I setted up debugging in VS Code with

   {
      "name": "Python C++ Debug",
      "type": "pythoncpp",
      "request": "launch",
      "pythonLaunchName": "Python: reconstruct",
      "cppAttachName": "(gdb) Attach",
      "stopAtEntry": false,
      "externalConsole": false,      
      "logging": {
        "moduleLoad": true,
        "engineLogging": true,
        "trace": true
      },      
    },
    {
      "name": "(gdb) Attach",
      "type": "cppdbg",
      "request": "attach",
      "args": [],
      "processId": "${command:pickProcess}",
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/gdb",
      "symbolLoadInfo": {
        "loadAll": true,
        "exceptionList": ""
      },
      "setupCommands": [
          {
             "description": "Enable pretty-printing for gdb",
             "text": "-enable-pretty-printing",
             "ignoreFailures": true
          },
          {
             "text": "set print elements 0"
          }
      ],
      "logging": {
        "moduleLoad": true,
        "engineLogging": true,
        "trace": true
      },
    },
      {
        "name": "Python: reconstruct",
        "type": "python",
        "request": "launch",
        "program": "bin/opensfm_main.py",
        "cwd": "${workspaceFolder}/OpenSfM",
        "args": "reconstruct data/lund",
        "console": "integratedTerminal",
        "justMyCode": false
      },

configurations in launch.json, I can debug Python code and can stop C++ code. But when it should show OpenSfM's call stack, I only see one line, [Unknown/Just-In-Time compiled code].

Tried debugging inside Docker through SSH and directly inside miniconda, result is the same.

Ubuntu 20.04, fresh VS Code, fresh OpenSfM main branch (commit b760b21f).

oaa3wf commented 10 months ago

@MikhailMashukov , do you have the same problem if you set the build type to Debug?