Skip to main content
Glama
executable-line-validation.md3.48 kB
# Executable Line Validation Feature ## 概要 ブレークポイントを設定できない行(空行、コメント行など)に設定しようとすると、エラーメッセージと最も近い実行可能な行を提案する機能を実装しました。 ## 実装内容 ### 1. 新しいユーティリティ関数(`src/mcp_debug_tool/utils.py`) #### `get_executable_lines(file_path: Path) -> set[int]` - Pythonの`dis`モジュールを使用してバイトコードから実行可能な行を抽出 - 空行、コメント行、実行されない構文(`else:`など)を除外 - シンタックスエラーがある場合は空のセットを返す #### `validate_file_and_line(file_path: Path, line: int, check_executable: bool = True)` - 従来の検証(ファイル存在、行番号範囲)に加えて、実行可能行チェックを追加 - `check_executable=True`(デフォルト)で実行可能行検証を有効化 - エラーメッセージに最も近い実行可能行を含める #### `find_nearest_executable_line(target: int, executable_lines: set[int]) -> int | None` - 指定した行番号に最も近い実行可能行を見つける - ユーザーへのヘルプメッセージ生成に使用 ### 2. 統合 既存の`sessions.py`では`validate_file_and_line`を呼び出しているため、自動的に新機能が有効になります。 ## テスト ### ユニットテスト(12個) - `tests/unit/test_executable_lines.py` - 空行、コメント行、関数定義、制御構文など様々なケースをカバー - 全テストパス ✅ ### 手動テスト ```bash uv run python manual_test/test_executable_validation.py ``` ## 動作例 ### ❌ 空行にブレークポイントを設定しようとした場合 ``` ValueError: Line 16 does not contain executable code. Nearest executable line: 15 ``` ### ❌ コメント行にブレークポイントを設定しようとした場合 ``` ValueError: Line 17 does not contain executable code. Nearest executable line: 18 ``` ### ✅ 実行可能な行にブレークポイントを設定した場合 ``` Breakpoint hit successfully! Locals captured: ['data_list', 'total', 'special_squares', 'processed_items', 'i', 'num'] ``` ## 利点 1. **ユーザーエクスペリエンスの向上**: 無効なブレークポイント設定を事前に防ぐ 2. **明確なエラーメッセージ**: 最も近い有効な行を提案 3. **デバッグ効率の向上**: 無駄な試行錯誤を削減 4. **後方互換性**: `check_executable=False`で従来の動作に戻せる ## バイトコードによる判定の仕組み Pythonの`dis.findlinestarts()`は、コンパイルされたコードオブジェクトから実際にバイトコード命令が生成される行番号を抽出します。 **実行可能な行の例:** - 変数代入: `x = 1` - 関数呼び出し: `print("Hello")` - ループ: `for i in range(10):` - 条件分岐: `if x > 0:` - return文: `return value` **実行不可能な行の例:** - 空行 - コメント行: `# This is a comment` - `else:`, `elif:`, `except:`, `finally:` などの単独のキーワード行 - docstring(実行されるが停止できない) ## 制限事項 - 構文エラーがあるファイルでは実行可能行を判定できない(空セットを返す) - マルチライン文字列の途中行など、一部のエッジケースでは判定が不正確な場合がある

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kaina3/Debug-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server