traceback — Print or retrieve a stack traceback¶ Source code: Lib/traceback.py This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter. The modul
これは、なにをしたくて書いたもの? Pythonで、動作しているスレッドのスタックトレースを出力する方法は?ということで。 環境 今回の環境は、こちら。 $ python3 -V Python 3.8.10 使う標準ライブラリ 今回の目的は、このあたりを使えば良さそうです。 traceback --- スタックトレースの表示または取得 — Python 3.8.10 ドキュメント sys --- システムパラメータと関数 — Python 3.8.10 ドキュメント threading --- スレッドベースの並列処理 — Python 3.8.10 ドキュメント 以降、これらを使ってちょっと試していきたいと思います。 スタックトレースを出力するコードを埋め込む まずは、スタックトレースを出力したい処理自体の中に、スタックトレースを出力するコードを埋め込んでみます。 thread_dump
/* Note how buffer overruns are undefined behavior and the compilers tend to optimize these checks away if you wrote them yourself, this only works robustly because the compiler did it itself. */ extern uintptr_t __stack_chk_guard; noreturn void __stack_chk_fail(void); void foo(const char* str) { uintptr_t canary = __stack_chk_guard; char buffer[16]; strcpy(buffer, str); if ( (canary = canary ^ __
はじめに Haskell のデバッグ手法については、以下の記事がとても詳しく参考になります。素晴らしい記事です。 Haskell でのデバッグ手法あれこれ 今回はHaskellアプリケーションをデバックする際に、バックトレースのとても簡単な取得方法があったのでご紹介したいと思います。 まとめると以下の2行です。 $ stack build --profile $ stack exec -- <exe_name> +RTS -xc バックトレースの取得方法 まず、バックトレースを取得するために GHC.Stack で定義されている HasCallStack をクラス制約として追加します。
GCC 4.6 RCが 3月14日に出ました。なんでもうすぐ正式版も出るかと 思います。Changlogを見ていると気になる機能がありました。それが stack-usage. 関数ごとのスタックの使用量が確認できるというものです。 これは Adaだとだいぶ前から実装されていたんですけど、4.6からは どの言語からでも利用することができます。 環境 Ubuntu 10.10 x64 GCC4.6のインストール GCC 4.5.1をビルドする - Life is very short GCC 4.5.2をビルドする - Life is very short と同じなので、これらの記事を参照してください。 準備さえできれば以下のコマンドで作成できます。 % tar xf archives/gcc-4.6.0-RC-20110314.tar.bz2 % cd gcc-4.6.0-RC-201103
今までいまいちモチベが上がらなかったHaskellでスクリプトを書くというのが、急に現実的になってしまったので、紹介します。 Haskellでスクリプティングする上での問題点 Haskellはもともと簡単なテキスト処理を書きやすいプログラミング言語ではあるのですが、標準で提供されているライブラリはあまり多くないので、必要に応じてコミュニティーパッケージを導入しなければその力を存分に発揮することができません。 通常のパッケージなら、cabalに依存関係を書けばパッケージマネージャで自動的に(コケることもありますが、理想的には)管理できるのですが、シェルスクリプトやPerl、あるいは最近ならPythonでやるような、コードを直接インタプリタで実行するような形のコードでは、そのような依存関係を自動で解決することは難しく、その上、仮にやろうとしたところで、いつまでもその依存パッケージが新しいコンパ
これまで GHC では、スタックトレースを取ることが有効なデバッグ方法ではなかった。 なぜなら遅延評価では、(再帰であってもなくても)末尾呼び出しは単なるジャンプになるから、スタックを使わないのである。スタックに戻る場所を積むのは、case と of の中で評価される式だけだ。(つまり、ここは正格に評価される。) この問題を解決するために GHC 7.4.2 から、わざわざスタックにログを残して、スタックトレースが取れるようになった。すなわち、最新の Haskell Platform をインストールしていれば、この機能を使えるということだ。 例として、以下のプログラムを考えよう。 module Main where main :: IO () main = print $ foo 3 + 1 foo :: Int -> Int foo x = x * 2 + bar x bar :: In
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く