デバッグTips¶
効率的なデバッグのためのヒントとコツを記載します。
ログの活用¶
効果的なログの使い方について記載します。
ログレベルの設定¶
import logging
# ログレベルの設定
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 使用例
logger.debug("デバッグ情報")
logger.info("情報")
logger.warning("警告")
logger.error("エラー")
logger.critical("重大なエラー")
構造化ログ¶
// JavaScript での構造化ログ例
const log = {
timestamp: new Date().toISOString(),
level: 'info',
message: 'User login',
userId: 12345,
ip: '192.168.1.1'
};
console.log(JSON.stringify(log));
デバッガーの活用¶
各言語でのデバッガーの使い方について記載します。
Node.js¶
// デバッガーの設定
debugger; // ブレークポイント
// VS Code での起動設定 (.vscode/launch.json)
{
"type": "node",
"request": "launch",
"name": "Debug Program",
"program": "${workspaceFolder}/index.js"
}
Python¶
import pdb
# ブレークポイントの設定
pdb.set_trace()
# Python 3.7以降
breakpoint()
パフォーマンスデバッグ¶
パフォーマンス問題のデバッグ方法について記載します。
プロファイリング¶
import cProfile
import pstats
# プロファイリングの実行
cProfile.run('your_function()', 'profile_output')
# 結果の表示
stats = pstats.Stats('profile_output')
stats.sort_stats('cumulative').print_stats(10)
メモリ使用量の監視¶
import psutil
import os
# メモリ使用量の確認
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
print(f"Memory usage: {memory_info.rss / 1024 / 1024:.2f} MB")
リモートデバッグ¶
リモート環境でのデバッグ方法について記載します。
SSH ポートフォワーディング¶
# ローカルポートをリモートサーバーに転送
ssh -L 5678:localhost:5678 user@remote-server
# リモートデバッガーの起動
python -m debugpy --listen 0.0.0.0:5678 --wait-for-client app.py
エラー追跡¶
エラーの追跡と分析方法について記載します。
スタックトレースの読み方¶
エラーログから問題を特定する方法について記載します。
エラー監視¶
// JavaScript でのエラーハンドリング
window.addEventListener('error', (event) => {
console.error('Global error:', {
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
error: event.error
});
});
一般的な問題と解決策¶
よくある問題とその解決方法について記載します。
無限ループの検出¶
無限ループを検出し、対処する方法について記載します。
メモリリークの特定¶
メモリリークを特定し、修正する方法について記載します。
データベース接続問題¶
データベース接続の問題をデバッグする方法について記載します。
デバッグツール¶
便利なデバッグツールについて紹介します。
Chrome DevTools: ブラウザでのデバッグ
Postman: API のテスト
DB Browser: データベースの確認
Log viewers: ログの解析