Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LT会:普段お世話になってるStackTraceと少しだけ向き合ってみる

Avatar for Yuto Yuto
May 14, 2025

 LT会:普段お世話になってるStackTraceと少しだけ向き合ってみる

Avatar for Yuto

Yuto

May 14, 2025
Tweet

More Decks by Yuto

Other Decks in Technology

Transcript

  1. はじめに StackTrace について、こんなこと一度は感じたことありませんか? • コンソールに大量のエラー内容が表示されて煩わしい • 英語の長文が出てきて、見る前からアレルギー反応 • 見方がいまいち分かっていない •

    ログの1種だろう、で、それ以下もそれ以上も考えたことない エンジニアである以上、今後もずっと付き合うことになる StackTrace について、 少しだけ向き合ってみましょう。
  2. StackTrace の役割 StackTrace の簡単な例 Error: Bad state: 'str' is null

    StackTrace: #0 main.<anonymous closure>.processString (file:///Users/<Path>/test/stacktrace_test.dart:7:9) #1 main.<anonymous closure>.main (file:///Users/<Path>/test/stacktrace_test.dart:16:9) #2 main.<anonymous closure> (file:///Users/<Path>/test/stacktrace_test.dart:23:5) #3 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:215:19) #4 Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:213:7) #5 Invoker._waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:258:9)
  3. StackTrace の役割 StackTrace の簡単な例 Error: Bad state: 'str' is null

    StackTrace: #0 main.<anonymous closure>.processString (file:///Users/<Path>/test/stacktrace_test.dart:7:9) #1 main.<anonymous closure>.main (file:///Users/<Path>/test/stacktrace_test.dart:15:9) #2 main.<anonymous closure> (file:///Users/<Path>/test/stacktrace_test.dart:22:5) #3 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:215:19) #4 Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:213:7) #5 Invoker._waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:258:9)
  4. StackTrace の役割 StackTrace の簡単な例 StackTraceを読み解くことで、 エラー箇所の特定を助け、 問題箇所の修正をするための情報源に。 Error: Bad state:

    'str' is null StackTrace: #0 main.<anonymous closure>.processString (file:///Users/<Path>/test/stacktrace_test.dart:7:9) #1 main.<anonymous closure>.main (file:///Users/<Path>/test/stacktrace_test.dart:15:9) #2 main.<anonymous closure> (file:///Users/<Path>/test/stacktrace_test.dart:22:5) #3 Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:215:19) #4 Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:213:7) #5 Invoker._waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:258:9)
  5. StackTrace と Log の違い 「StackTraceとLogとの違いは?」 StackTrace は、エラー発生時の呼び出し履歴であり、自動で取得できる。 Log は、システムの広範な活動記録であり、意図した仕込みが必要。 ※

    StackTrace を Log に含めることも一般的ですが、 「StackTrace = Logの一部」ではないことは注意。 Stack Trace Time stamp user Id event Id url Log
  6. StackTrace と Log の違い 【StackTrace】 • 目的 • プログラムの実行中に発生したエラーや例外が、どのような処理の経路をたどって発生した のかを特定すること

    • 取得内容 • エラーや例外が発生した時点の、プログラムの呼び出し履歴(時系列) • どのクラスの、どのメソッドでエラーが発生したかどうか • ファイル名と行番号 • ライブラリやフレームワーク側の実行履歴 • 用途 • 不具合解析(デバッグ):不具合箇所・不具合原因の特定 • 処理の流れの把握:コード理解に一部有効
  7. StackTrace と Log の違い 【Log】 • 目的 • システムやアプリケーションの “動作状況、イベント、状態の変化”

    などを記録し、後から 参照できるようにすること • 取得内容 • アプリケーションの動作に関する情報(ex. ログイン、データの作成・更新) • システムの状態に関する情報( ex. CPU使用率、メモリ使用量、ネットワークの状態) • エラーや警告などの情報 • ログレベルの設定により、記録する情報の粒度を調整可能 • 用途 • 運用監視: システムが正常に動作しているかなどの監視 • 障害調査: 問題が発生した際、その前後の状況を把握して原因特定 • セキュリティ監査:アクセスや操作の記録を残し、不正アクセスや操作の追跡 • 利用状況分析: ユーザーの行動や利用状況を分析・改善に利用 • デバッグ: 開発中にデバッグに利用
  8. StackTrace と Log の違い StackTraceとLog の違いざっくりまとめ • Stack Trace: •

    用途:エラー発生時の原因特定、処理の流れの把握 • 取得契機:エラー発生時 • Log: • 用途:エラーの原因特定、通常動作時の”監視・分析”などで幅広く参照 • 取得契機:意図的に仕込んだ箇所
  9. まとめ • StackTrace とは • エラー発生時点までの処理の呼び出し履歴 • StackTrace の役割 •

    エラー発生時、原因箇所の迅速な特定 • StackTrace と Log の違い • Stack Trace:エラー発生時の原因特定 • Log: エラーの原因特定、通常動作時の”監視・分析”などで幅広く参照