メインコンテンツへ飛ぶ

Electron のデバッグ

Electron の問題やバグをデバッグするには様々なアプローチがありますが、その多くはプラットフォーム固有のものです。

一般的なアプローチのいくつかを以下に示します。

一般的なデバッグ

Chromium には、C++ および Objective-C++ のコンソールに情報を出力してデバッグを支援するロギングマクロが含まれています。

これは変数の値、関数名、行番号などの出力に利用できます。

いくつかの例:

LOG(INFO) << "bitmap.width(): " << bitmap.width();

LOG(INFO, bitmap.width() > 10) << "bitmap.width() is greater than 10!";

ログの重要度には、INFOWARNERROR があります。

詳しい情報と例については、Chromium のソースツリーの logging.h をご参照ください。

スタックトレースを表示する

Chromium には、プログラムを中断することなくスタックトレースをコンソールに出力するヘルパーがあります。

#include "base/debug/stack_trace.h"
...
base::debug::StackTrace().Print();

これにより、呼び出しチェーンを観察し、潜在的な問題領域を特定できます。

ブレークポイントによるデバッグ

注意として、これによりビルドのサイズが大幅に増加し、ディスク使用容量が 50G 程度増加します。

以下の内容を electron/.git/info/exclude/debug.gn に記述します。

import("//electron/build/args/testing.gn")
is_debug = true
symbol_level = 2
forbid_non_component_debug_builds = false

そして、以下で実行します。

$ gn gen out/Debug --args="import(\"//electron/.git/info/exclude/debug.gn\") $GN_EXTRA_ARGS"
$ ninja -C out/Debug electron

これでブレークポイントによるデバッグに LLDB を使用できるようになりました。

プラットフォーム固有のデバッグ

シンボルサーバーでのデバッグ

デバッグシンボルは、よりよいデバッグセッションができるようにします。 これらは実行ファイルやダイナミックライブラリに含まれる関数の情報を持っており、クリーンなコールスタックを得るための情報を提供します。 Symbol Server を使用すると、デバッガは大きなデバッグファイルをユーザにダウンロードさせることなく、正しいシンボル、バイナリ、そしてソースを自動的にロードできます。

Electron 用のシンボルサーバーの設定方法については、シンボルサーバーでのデバッグ をご参照ください。