本文へスキップ

GDB 18.1、Windowsでnon-stopデバッグに対応しstabsを廃止

9月25日公開のGDB 18.1(GNUデバッガー)は、Windows 10以降でのノンストップ・デバッグ、新しいsaveコマンドや環境変数コマンドを追加し、古いstabsデバッグ形式を削除した。

著者 Tech AI Wire Team

4 分で読めます

GDBのテキストインターフェースのスクリーンショット。マルチスレッドのC++ファイルのブレークポイントで停止しており、ソース表示の下にスタックのバックトレースが表示されている。
写真: Wikimedia Commons / Auremel, CC BY-SA 3.0

GNUプロジェクトは2026年9月25日、コマンドライン・デバッガーGDBのバージョン18.1をリリースした。最大の変更はWindows向けで、Windows 10以降でnon-stopデバッグが使えるようになった。一方で、古いデバッグ形式のサポートがいくつか削除された。そのため、一部のレガシーなビルドは正しく読み込めなくなる。

GDBは、実行中のプログラムを一時停止し、1行ずつ進めながら変数の中身を調べるためのツールだ。Ada、C、C++、Fortran、Go、Rustなど多くの言語に対応している。以下の変更点は、gdb-announceメーリングリストに投稿された公式リリース告知に基づき、LWNの記事で詳細を補ったものだ。

Windows開発者にとっての変更点

告知によると、GDB 18.1で最も多くの改善を受けたのはWindowsだ。ネイティブWindowsターゲット、つまり同じWindowsマシン上のプログラムをGDBでデバッグする場合に、Windows 10以降でnon-stopモードが使えるようになった。

non-stopモードでは、あるスレッドがブレークポイントで止まっている間も、他のスレッドは動き続ける。サーバーやGUIアプリでは、全スレッドを一度に止めると追いかけているバグが隠れてしまうことがあるため、これは重要だ。Windowsではscheduler-lockingも使えるようになった。これは、1つのスレッドをステップ実行している間に他のスレッドを動かすかどうかを制御する機能だ。

WindowsのGDBは、スレッドローカルストレージ(TLS)の変数も読めるようになった。TLS変数とは、スレッドごとに別々の値を持つ変数のことだ。告知には、Windows Terminalでの24ビット・トゥルーカラー表示や、UTF-8テキストと絵文字への対応も挙げられている。ファイルパスは常にスラッシュ区切りで表示されるようになった。

GDB 18.1の新しいコマンド

今回のリリースでは、いくつかのコマンドが追加された。告知とLWNの要約の両方に記載がある。

コマンド内容
set/show/unset local-environmentデバッグ対象プログラムの環境変数を管理する
save historyコマンド履歴をファイルに書き出す
save skipステップ実行時にスキップする関数やファイルの一覧を保存する
save userユーザー定義コマンドを保存する
set/show progress-bars enabledプログレスバーの表示を切り替える
info proc environLinuxプロセスの環境変数を表示する

新しい--no-escape-argsオプションを使うと、プログラムの引数をエスケープせずに渡せる。改行文字を含む引数も、引用符で囲めば使えるようになった。extended-remoteターゲット、つまりGDBが別のマシン上のプログラムを操作する場合は、リモートの実行ファイルが自動で設定されるようになった。

LWNによると、info localsは同じ名前の別の変数を隠している(シャドーイングしている)変数に印を付けるようになった。各変数がどこに格納されているかも表示される。

Python APIと新しいターゲット

GDBはPythonでスクリプトを書くことができ、18.1ではそのインターフェースが拡張された。告知には、コアダンプを扱うための新しいgdb.Corefileクラスが挙げられている。コアダンプとは、クラッシュしたプログラムが残すメモリのスナップショットのことだ。ほかにgdb.Styleクラスと、selected_contextとcorefile_changedという2つのイベントレジストリも追加された。Pythonからの逆アセンブル出力にもスタイルを付けられるようになった。

新しいターゲットは2つある。1つは、FPGAチップで使われる小型プロセッサー設計MicroBlaze上のGNU/Linuxで、gdbserver経由で対応する。もう1つはAArch64 MinGW、つまりMinGWツールチェーンでビルドした64ビットArm版Windowsだ。LWNによると、AArch64では浮動小数点モードレジスター(FPMR)にも対応した。

GDB 18.1で削除されたもの

告知によると、GDB 18.1では古い形式やプラットフォームがまとめて削除された。

  • stabs、mdebug、dbxのデバッグ形式
  • Common Trace Format
  • 古いバージョンの.gdb_indexセクション(シンボルの読み込みを速くするためのインデックス)
  • 分割デバッグファイル用のパッケージ形式DWPのバージョン1
  • AIX 7.1
  • 32ビットs390ターゲット

改善点としては、.gdb_indexセクションに型シンボルが含まれるようになり、GDBが型をより速く見つけられるようになった。ソースコードはGNUのFTPサーバーから、22 MiBの.tar.xzファイルか37 MiBの.tar.gzファイルで入手できる。

開発者にとっての意味

アップグレードの前に、ビルドフラグを確認しておきたい。stabsは、現在ほとんどのコンパイラーが出力する標準形式DWARFより前のデバッグ形式だ。最近のツールチェーンの多くは、ずっと前にstabsの使用をやめている。しかし古い組み込み向けツールチェーンやレガシーなビルドスクリプトは、今も-gstabsを渡しているかもしれない。その場合、GDB 18.1はそのデバッグ情報を読めなくなる。先にDWARFへ切り替えるべきだ。

分割デバッグの構成も同様だ。チームが古いバージョン1形式の.dwpファイルをまだ使っているなら、18.1に移行する前に作り直そう。古いGDBで作った.gdb_indexセクションも作り直しておきたい。新しいインデックス形式には型も含まれるので、いずれにせよ作り直す価値はある。

マルチスレッドのコードでGDBを使うのをあきらめていたWindows開発者は、もう一度試してみるとよい。non-stopモードとscheduler-lockingを組み合わせれば、プログラムの他の部分を止めずに1つのワーカースレッドだけを止められる。

独自コマンドを詰め込んだ.gdbinitファイルを使っているなら、save userでバックアップを取ってみよう。さらにsave historyを使えば、GDBを終了しても長いデバッグ作業の履歴が失われない。GDBのPython APIでツールを作っているチームは、クラッシュダンプを調べるスクリプト向けにgdb.Corefileを確認するとよい。

使っているLinuxディストリビューションが18.1をパッケージ化するまでは、GNUのFTPサーバーにあるソースtarballからビルドできる。

出典

  1. GDB 18.1 released! - Sourceware gdb-announce
  2. GDB 18.1 released - LWN.net

関連記事

ansi2html v1.9.4のGitHubリリースページ。FixesにCVE-2026-92973の修正「osc8: ensure proper escaping」が載っている。
開発ツール

SourceHutのビルドログXSS、アカウント乗っ取りが可能に

細工したビルドログでSourceHutユーザーのブラウザ上でスクリプトを実行できるクロスサイトスクリプティングの欠陥です。ansi2html 1.9.4がバージョン1.7.0から1.9.3に影響したCVE-2026-92973を修正しました。