1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VScodeで共有ライブラリのデバッグを行う

Last updated at Posted at 2020-10-03

C++で作成した共有ライブラリ(.so)のデバッグをVScodeでやろううとしたが,
あまり情報がなく苦労したので記事にしておきます。

共有ライブラリの作成

まずはライブラリの作成

g++ -shared -g -fPIC -o libtodebug.so file1.cpp file2.cpp

分割コンパイルする場合は

g++ -g -fPIC -c -o file1.o file1.cpp
g++ -g -fPIC -c -o file2.o file2.cpp
g++ -shared -o libtodebug.so file1.o file2.o

でビルドします. -fPICオプションを入れる必要があります.

VScodeでデバック

VScodeのデバッグでは,
デバッグ設定ファイルに共有ライブラリを使用する実行ファイルを起動するよう設定する必要があります。

launch.json
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Pythonデバッガ",
            "type": "cppdbg",
            "request": "launch",
            "program": "python",
            "args": [
            "${デバッグ用のPythonファイル名, debug.py}"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
                }
            ]
        }
    ]
}

gdbでデバッグをするプログラムにPythonのプログラムを指定し,
Pythonないで共有ライブラリを読み込み, Pythonから共有ライブラリ内の関数をコールすることで,
gdbでデバッグを行うという形になります.

もちろんPythonでもなくていいのですが,
今回は共有ライブラリをロードして実行する関数が書きやすいPythonを選択しました.

Pythonプログラムの作成

共有ライブラリをロードして関数をコールするPythonプログラムを書きます.

debug.py
import ctypes

def main():
    sharedlib = ctypes.cdll.LoadLibrary("./libtodebug.so")
    func = sharedlib .SampleFunc
    func.argtypes = [ctypes.c_int]
    func.argtypes = [ctypes.c_int]
    res = func(ctypes.c_int(10))
    print(res)

if "__name__" == "__main__":
    main()

こんな感じになります。
私の場合はtkinterでGUIを作成して柔軟にデバッグできる環境を作成しました.

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?