Android StudioのLogcatにソースへのリンクを出力する

概要

Android StudioのLogcatにソースへのリンクを張る機能があることを知ったので仕様をまとめました。

フォーマット

以下のフォーマットの文字列を出力すると、ソースへのリンクを張ることができます。
(ファイル名と行番号をコロンで連結し、括弧で囲む。)

// Format:
// (ファイル名:行番号)

// Example:
Log.v("MainActivity", "(MainActivity.kt:10)")

実行結果

ログにファイル名と行番号を自動で追加する

ログにファイル名と行番号と自動で追加するコードをどこかに書いておくと便利かもしれません。

// Sample:
fun link(message: String): String {
    val frame = Exception().stackTrace[1]
    return "$message (${frame.fileName}:${frame.lineNumber})"
}

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.v("MainActivity", link("Hello World!!"))
    }
}

実行結果

存在しないファイルへのリンク

モジュール内に存在しないファイルを指定した場合はリンクになりませんでした。
以下の構成のプロジェクトで検証を行いました。

Log.v("MainActivity", "(FugaFuga.kt:20)")

実行結果

存在しない行番号へのリンク

負の値の場合

リンクになりませんでした。

Log.v("MainActivity", "(MainActivity.kt:-1)")

実行結果

0の場合

リンクになり、クリックすると該当ファイルの前回編集位置に遷移しました。

Log.d("MainActivity", "(MainActivity.kt:0)")

実行結果

巨大な値の場合(999,999,999行以下)

リンクになり、クリックすると該当ファイルの末尾に遷移しました。

Log.d("MainActivity", "(MainActivity.kt:999999999)")

実行結果

巨大な値の場合(1,000,000,000行以上)

リンクになりませんでした。
Android Studioでは、10億行以上のファイルになるとLogcatからリンクで遷移できないので10億行以上のファイルを作ってはいけないことが分かります。

Log.d("MainActivity", "(MainActivity.kt:1000000000)")

実行結果

同名のファイルが複数ある場合

異なるパッケージに同名のファイルがある場合はファイル選択ポップアップが表示されました。
以下の構成のプロジェクトで検証を行いました。

Log.d("MainActivity", "(HogeHoge.kt:1)")

実行結果

まとめ

ログに(ファイル名:行番号)を出力するとLogcatからソースコードにリンクを張ることが出来ました。
地味ですが便利な機能だと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です