Qt, Linux and everything: Debugging Qt WebAssembly

2025/12/10 6:19

Qt, Linux and everything: Debugging Qt WebAssembly

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

WebAssembly にコンパイルされた Qt アプリケーションのデバッグは、ビルドに完全な DWARF デバッグシンボルを含め、Chrome の「C/C++ DevTools Support (DWARF)」拡張機能を使用する場合に最も効率的です。Emscripten を

-g
(または
CMAKE_BUILD_TYPE=Debug
)で構成すると、生成されるバイナリに絶対パス情報が含まれるため、追加のシンボリックリンクは不要です。Qt のデフォルトのデバッグライブラリは
-g2
しか使用しませんが、より高いレベルのフラグで再ビルドすると、ブレークポイントやスタックトレースに必要なすべてのシンボルデータを保持できます。再ビルド後、DWARF 拡張機能を有効にした Chrome を起動し、WebAssembly ページを読み込み、DevTools がシンボルを解析するまで待ちます。その後、ネイティブ Qt デスクトップアプリと同様にブレークポイントを設定でき、ページのリロード時に実行がそのポイントで停止します。これによりステップスルーデバッグが可能になります。この方法は Chrome のみで利用できます。Safari や Firefox ではソースマップにフォールバックする必要があります。完全なデバッグ情報を有効にすると、開発者は問題の診断時間を短縮でき、Qt ベースの Web プロジェクトのコード品質が向上します。

本文

開発者が最も退屈に感じる作業の一つは、煩わしいバグをデバッグすることです。ウェブアプリであるほど苦労しますし、WebAssembly を使ったウェブアプリではさらに大変になります。

Qt WebAssembly のデバッグを最も簡単に行う方法は、

-g
オプションでビルドしたり
CMAKE_BUILD_TYPE=Debug
に設定することです。Emscripten は wasm バイナリに DWARF シンボルを埋め込みます。

注意: DWARF を使った wasm ファイルのデバッグは Chrome のみで、ブラウザ拡張機能「C/C++ DevTools Support (DWARF)」が必要です。Safari や Firefox では利用できないため、代わりにソースマップを生成する必要があります(次回のブログ記事で紹介します)。

DWARF デバッグ

  • ブラウザ開発者ツールの設定で DWARF を有効化します。ソースマップとは違い、ソースディレクトリへのシンボリックリンクは不要です。バイナリにフルパスが埋め込まれているためです。
  • -g
    でビルドすると Emscripten が自動的に DWARF シンボルを埋め込みます。Qt やアプリケーションをデバッグモードで再ビルドすれば十分です。
  • Qt はデフォルトで
    -g2
    を使用してデバッグライブラリを構築します。これはデバッグ情報は少ないもののリンク時間が短い設定です。完全なシンボルを保持したい場合は、Qt をデバッグモードで
    -g
    (または
    -g3
    ; 両方同等)にしてビルドしてください。

DWARF デバッガの使用方法

  1. Chrome で拡張機能をインストールし、コンソールツールを起動します。
  2. デバッグしたい Qt for WebAssembly のウェブアプリへ移動します。開いたら、すべてのシンボルとファイルが解析されるまで数秒かかります。Qt 自体にデバッグしている場合はさらに時間が掛かることがありますので、しばらく待ちます。
  3. JavaScript コンソールにはソースファイルのパスと内容がリスト表示されます。対象ファイルを見つけてブレークポイントを設定し、ページを再読み込みします。ブレークポイントに到達すると実行が停止し、現在の行がソースビューでハイライトされます。また変数名と値も表示されます。
  4. デスクトップアプリケーションと同様にコードをステップ実行できます。

このワークフローにより、Chrome 内で DWARF シンボルを使って Qt WebAssembly アプリケーションのデバッグが直接可能になります。

同じ日のほかのニュース

一覧に戻る →

2025/12/10 0:00

Show HN: Gemini Pro 3 hallucinates the HN front page 10 years from now

## Japanese Translation: ## 改訂版まとめ この記事では、最近のさまざまな技術的マイルストーンとリリースをレビューしています。 1. **SpaceX**:Starship HLS‑9 が Sea of Tranquility からテレメトリーを正常に送信しました。 2. **Linux Kernel**:バージョン 7.4 に完全な上流化された 100 % Rust カーネルが含まれています。 3. **開発者プラクティス**:生のコードを書くこととコンパイラプロンプトを使用することを対比した議論があります。 4. **人工知能**:LLaMA‑12 7B モデルは WebAssembly を介してコンタクトレンズ上で動作し、YC シード付きスタートアップ Nia は自律型コーディングエージェントを導入しています。 5. **教育ツール**:AlgoDrill は LeetCode パターンの強化に向けたインタラクティブなプラットフォームを提供します。 6. **エネルギー研究**:ITER の炉は 20 分間連続で正のエネルギー収支を達成しました。 7. **ハードウェア修理**:2024 年製 Framework Laptop を復元する方法を詳細に説明したレトロスペクティブガイドがあります。 8. **クラウドサービス**:Google は Gemini Cloud Services の提供を終了します。 9. **グラフィックスプログラミング**:WebGPU 2.0 により第 5 次元の可視化が可能になりました。 10. **Linux ディストリビューション**:Debian がバージョン 18 “Trixie” をリリースしました。 11. **プログラミング言語提案**:`sudo` ユーティリティを Zig で書き直す提案が提示されています。 この記事はこれらの出来事を文脈に置き、各々が過去の成功にどのように基づいているかを指摘し、その進歩が今後の開発実践、AI 統合、およびクラウドサービス戦略に影響を与えることを示唆しています。

2025/12/10 2:08

PeerTube is recognized as a digital public good by Digital Public Goods Alliance

## Japanese Translation: ### Summary PeerTubeはプラットフォームに依存しない多言語対応のビデオホスティングおよびライブストリーミングソリューションで、正式にデジタル公共財(DPG ID0092472)として承認されています。2025年10月7日にRicardo Torresによるレビューが行われ、Platform Independence評価を含むすべてのDPG標準要件を満たしていることが確認されました。これにより、ベンダーロックインなしで任意のインフラ上で実行できることが保証されています。ソースコードはGitHub(`github.com/Chocobozzz/PeerTube`)とFramagit(`framagit.org/framasoft/peertube`)で公開されており、透明性とコミュニティの貢献を確保しています。PeerTubeは44以上の言語(エスペラント、アラビア語、中国語簡体字・繁体字、日本語、韓国語、スペイン語、フランス語、ドイツ語、イタリア語、ポルトガル語、ロシア語など)をサポートし、フランスの教育省からイタリアの国家研究評議会、複数のドイツ大学、Blender、Debianプロジェクト、および活動家グループまで、多様な組織で既に利用されています。承認は2026年10月7日まで有効であり、毎年自己申告による使用状況更新が求められます。この推奨は、機関やオープンソースコミュニティが分散型ビデオプラットフォームを採用することを促進し、メディアホスティングの風景をよりオープンで多言語化、ベンダー非依存な解決策へとシフトさせる可能性があります。

2025/12/10 5:33

Django: what’s new in 6.0

## Japanese Translation: --- ## Django 6.0 – 主なリリースハイライト *リリース日 2025‑12‑03* | エリア | 変更点 | 意義 | |------|--------------|----------------| | **テンプレート** | 新しい `{% partialdef %}` / `{% endpartialdef %}` タグで、テンプレートを再利用可能なフラグメントに分割し、インラインまたは別途レンダリングでき、htmx とも相性が良い。 | テンプレートの DRY 化、ボイラープレート削減、コンポーネント再利用の容易化。 | | **バックグラウンドタスク** | 組み込み「Tasks」フレームワーク: `@task` デコレーター + `Task.enqueue()` API。組み込みバックエンド(`ImmediateBackend`、`DummyBackend`)があり、実稼働ではサードパーティパッケージ(例: `django-tasks` の `DatabaseBackend`)が必要。 | 単純なジョブに対して外部タスクライブラリの必要性を排除しつつ、実稼働時の柔軟性は維持。 | | **セキュリティ** | `ContentSecurityPolicyMiddleware` を追加。 `SECURE_CSP` と `SECURE_CSP_REPORT_ONLY` で設定可能。ノンスは自動生成され、テンプレート内では `{% csp_nonce %}`(`nonce="{{ csp_nonce }}"`)で使用できる。 | 自動ノンス処理付きの CSP サポートを組み込み、XSS リスクをデフォルトで低減。 | | **メール** | Django のメール API が Python の `email.message.EmailMessage` を利用するように変更。 `EmailMessage.send()` は内部でこの API に変換し、インライン添付は `MIMEPart` オブジェクトで追加可能。 | 標準ライブラリ互換のモダンなメール処理と簡易的な添付サポート。 | | **Mail API の非推奨** | `django.core.mail` API ではキーワード専用引数が必須となり、位置オプションパラメータは警告を出し将来的にエラーになる。 | より明確な API 使用を促進し、コードの未来保証を実現。 | | **シェル** | 自動インポートが拡張され、 `settings`、`connection`、`models`、`reset_queries`、`functions`、`timezone` が追加。 | もっと高速で便利な対話型開発環境。 | | **ORM** | • 動的フィールド(`db_default`、`GeneratedField`)は `save()` 後に SQL RETURNING を通じてリフレッシュされる;未対応バックエンドでは次回アクセス時まで遅延。<br>• `StringAgg` 集約がすべてのサポートデータベースで動作;文字列リテラル区切りは `Value()` で包む必要。<br>• デフォルト主キー型が `BigAutoField` に変更され、新規プロジェクトでは `DEFAULT_AUTO_FIELD` を設定しなくなる。 | モデル定義の簡素化、パフォーマンス向上、大規模アプリでの PK 終了防止。 | | **テンプレート変数 & タグ** | `forloop.length` が追加され、ループ長にアクセス可能;更新された `querystring` タグは `?` で接頭辞し、複数位置引数を受け取り、重複時には優先順位でマージ。 | より表現力豊かなテンプレートロジックとクリーンなクエリ文字列処理。 | | **コミュニティ** | Django 6.0 に 174 人の貢献者が参加。リリースノートではアップグレード準備を強調し、開発者に新機能を試すよう呼びかける;今後のリリースでタスクバックエンドや CSP 機能が拡張される可能性。 | 健全なコミュニティサポートとさらなる改善へのロードマップを示唆。 | **まとめ:** Django 6.0 は、再利用可能なテンプレートフラグメント、オプションの組み込みタスクシステム、ノンス付き CSP ミドルウェア、モダン化されたメール API など、実務で即使える改善を提供します。さらに ORM の強化、シェルの利便性向上、旧パターンの非推奨により、ボイラープレート削減・セキュリティ向上・大規模プロジェクトの将来準備が実現されます。 ---