Skip to content

Instantly share code, notes, and snippets.

View ono-max's full-sized avatar
💭
I may be slow to respond.

Naoto Ono ono-max

💭
I may be slow to respond.
View GitHub Profile

Ruby アソシエーション開発助成金2021中間報告: “debug.gem”の利用体験・開発効率の改善

取り組んだこと

 前期では、本プロジェクトのゴールである Chrome でのデバッグ機能を実現する CDP サーバーと、CDPサーバー と DAPサーバー(VS Code でのデバッグ機能を実現するサーバー) のテストフレームワークの開発を中心に取り組んだ。

 CDP サーバーの開発については本プロジェクト開始前にプロトタイプとして導入されていたものを改善する形で主にバグ修正や Chrome DevTools 上の UI として提供されている機能をサポートしていった。 バグ修正については手元の環境で Chrome を用いてデバッグ機能を行いそれを元に見つかったバグを中心に修正を行っていった。提供されている機能のサポートについては、例外で止まる機能やブレークポイントなしでスクリプト実行を強制する機能などを実装した。他にもデバッガー起動時に Chrome を自動で開いて Chrome DevTools とデバッガーの接続を自動で行う機能や Chrome のコンソールで式評価をした際に標準出力に出力されるものをターミナルではなくコンソール上に出力されるものを開発した。

 テストフレームワーク開発についてはプロトタイプとしていくつかのものを Pull Request として作りながらメンテナンス性や可読性の高いものを考えていった。現在 DAP サーバーのテストフレームワークがプロトタイプとしてマージされている。

Socket.tcp_server_sockets "127.0.0.1", 9229 do |socks|
Socket.accept_loop(socks) do |sock, client|
while l = sock.gets
p l
case l
when /^GET \/json\/version HTTP\/1.1/
sock.print "HTTP/1.0 200 OK\r\nContent-Type: application/json; charset=UTF-8\r\nCache-Control: no-cache\r\nContent-Length: 64\r\n\r\n{\n \"Browser\": \"node.js/v17.0.1\",\n \"Protocol-Version\": \"1.1\"\n} "
when /^GET \/json HTTP\/1.1/
sock.print "HTTP/1.0 200 OK\r\nContent-Type: application/json; charset=UTF-8\r\nCache-Control: no-cache\r\nContent-Length: 660\r\n\r\n[ {\n \"description\": \"node.js instance\",\n \"devtoolsFrontendUrl\": \"devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:9229/5e7fe95a-33c8-4035-a11a-de9f5845840a\",\n \"devtoolsFrontendUrlCompat\": \"devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/5e7fe95a-33c8-4035-a11a-de9f5845840a\",\n \"faviconUrl\": \"https://nodejs.org/static/images/favicons/favic

Google Summer of Code 2021: Tests for debugger

Background and Motivation

Current lib/debug.rb is no longer being maintained and it is not appropriate for current Ruby features. Koichi Sasada started writing new lib/debug.rb (hereinafter referred to as the new debugger) to replace it(For more information, see this article). However, it was hard to write test for it because the test framework have to test the new debugger without interrupting debugger process. That's why we worked on developping the test framework for the new debugger as the part of GSoC 2021 project.

Project Goal

Main goal