私がロボットシステム開発のリードエンジニアを務めたプロジェクトでリリースした製品が、正式に公表されました。
一般消費者の方が実際にオーダできるようになっております。様々なメディアでも大々的に取り上げられました。
私がロボットシステム開発のリードエンジニアを務めたプロジェクトでリリースした製品が、正式に公表されました。
一般消費者の方が実際にオーダできるようになっております。様々なメディアでも大々的に取り上げられました。
は、こちらのサイトが非常に分かりやすい。(もはや自分で書く必要がない笑)
下記事では、Docker コンテナ内から直接デバッグ対象のプログラムをデバッグ実行する方法を記載しました。
ところが、ユースケースというのは増えるものです。コンテナで実行しているプログラムを、リモートからデバッグしたいという場面もあったりします。
その方法も忘れないうちに。
すでに対象の Docker コンテナは起動済みであるとします。また、「ローカル側から」アタッチしてコードをデバッグすることを想定します。
リモートマシンとローカルマシンでの環境構築は、下記を参考に行いました。
コード内に直接下記を挿入します。好きなところに入れられるので、割と便利です。
import ptvsd print("waiting...") ptvsd.enable_attach() ptvsd.wait_for_attach()
リモートアタッチ用のコンフィグレーションを追加します。
例によって、VSCode 左側のメニューから、下図の項目を選択します。
Select Debug Configuration が表示されたら、Remote Attach を選択します。
Remote Debugging (1/2) にて、リモートの IP アドレスを入力します。同一 PC なら、まずlocalhost
で大丈夫です。
Remote Debugging (2/2) にて、ポート番号を入力します。空いていればなんでも良いので、デフォルトの 5678
で大丈夫です。
これで、デフォルトのコンフィグレーションが追加されます。
{ "name": "Python: Attach", "type": "python", "request": "attach", "connect": { "host": "localhost", "port": 5678, } "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ], "justMyCode": false, },
実際に動作させる環境に合わせて、微調整が必要です。
"localRoot" がターゲットのコードのパスと異なると、break point をセットしてもキャッチされません。
よくあるのが、VSCode はリポジトリのルートディレクトリで開いているけど、デバッグしたいコードは結構下層のプロジェクトフォルダの中だったりする、というケース。
このような場合、ターゲットのコードがエントリポイントなら、"localRoot" を ${workspaceFolder} に書き換えることで、コードがあるフォルダを動的に指定することができます。
基本的な変数は下記に記載されていました。
用意されている変数でうまくいかないときは、任意の絶対パスに書き換えることで対応も可能です。
まずは、リモートで対象コードを実行します。
waiting...
と表示されたら、準備完了です。
ローカル側で対象コードの任意の行に break point をつけて、デバッグ実行してみましょう。catch に成功するはずです。
あとは、ライブラリ内のデバッグもしたいなら、"justMyCode" の設定を false
にすることも忘れずに。
下記事にて、とりあえず Docker コンテナ内のコードにアクセスできるようになったのは良しとしましょう。
ところが、デフォルトの設定では、ライブラリ化されたコードは追えません。 例えば、ROS2 で python コードを colcon build してパッケージ名で import すると、それはライブラリ化されてしまっているので、デフォルトでは入れません。
できるだけ追加の設定ファイルを変えたくなかったのですが、一か所だけ変更が必要みたいなので、おとなしく従うことにします。
VSCode 左側のメニューから、下図の項目を選択します。
Select Debug Configuration
が表示されたら、Python File
を選択します。
生成される launch.json
を確認します。
justMyCode
のフィールドがデフォルトだと true
なので、false
にします。
{ "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "justMyCode": false, },
これで、縦横無尽にライブラリにステップインできます。
すでに対象の Docker コンテナは起動済みであるとします。また、「リモート側」で直接コードを実行することを想定します。
以下のページの、「起動しているコンテナに接続する」を参考に接続します。
画面左上のエクスプローラマークをクリックすると、開きたいフォルダを選択できるので、そこから対象のフォルダを開きます。
画面左の拡張機能アイコンをクリックし、「Python」機能をインストールします。
VSCode からターミナルを開いて、必要な環境変数等を source しておきます。
実行したいファイルを開いた状態で F5 を押すと、デバッグ実行が走ります。
ワーキングディレクトリが動作に影響するプログラムの場合、os.chdir()
で適切なディレクトリを設定しておきます。
あとは任意の行にブレイクポイントなどをつけておけば、よしなにやってくれます。
PosrgresSQL 入れたあと、他のPCからアクセスするときのセットアップで何回も同じことを調べている気がしたので、メモ。
moriken@hoge:~$ sudo apt update moriken@hoge:~$ sudo apt install postgresql postgresql-contrib
とりあえずデフォルトユーザの postgres にパスワードを付与する。 まずはOS側で posgres ユーザとしてログイン。
moriken@hoge:~$ sudo -i -u postgres postgres@hoge:~$
postgres のメタコマンド実行モード
postgres@hoge:~$ psql posgres=#
データベース確認。postgres がいる。
posgres=# \l Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres
ユーザ確認。postgres がいる。
posgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
posgres=# ALTER ROLE postgres WITH PASSWORD 'ここにパスワードを入れる'; ALTER ROLE
これで、アドレス、ポート、ユーザ名、パスワードを指定することでアクセス可能となる。
何やら面白い記事を見つけた。8回に渡る、長めの連載記事。
書かれたのは2014年だが、書かれている内容は大方今日でも通用する。
備忘録がてら、ペタペタリンクを残しておこうと思う。
こういう本質を見えるようになるのは、本当に素晴らしいことと思う。
如何に自分が何も見えずに生きてきたものかと、痛感させられる。
未熟な人間として、できることからやっていこうと思う。