나는 일반적으로 Debug.Trace 사용
import Debug.Trace
buggy acc xs | traceShow (acc,xs) False = undefined
buggy acc [] = acc
buggy acc (x:xs) = buggy (acc + x) xs
main = print $ buggy 0 [1..10]
이 버그 기능이 어떻게 작동하는지 나를 볼 수 있습니다 :
(0,[1,2,3,4,5,6,7,8,9,10])
(1,[2,3,4,5,6,7,8,9,10])
(3,[3,4,5,6,7,8,9,10])
(6,[4,5,6,7,8,9,10])
(10,[5,6,7,8,9,10])
(15,[6,7,8,9,10])
(21,[7,8,9,10])
(28,[8,9,10])
(36,[9,10])
(45,[10])
(55,[])
55
의 열쇠가 일치하지 않는 것 동안 일치하지 않지만 뭔가를 인쇄 결코 패턴을 갖는 . 그런 식으로 항상 평가되고 (따라서 디버깅 정보가 인쇄됩니다) 모든 기능을 쉽게 적용 할 수 있습니다. 그러나 당신은 또한 당신이 특정 사건을보고 싶은 경우는 같은 일치 할 수 있습니다 :
buggy acc [] = acc
buggy acc (x:xs) | traceShow (acc, x, xs) True = buggy (acc + x) xs
그런 다음 당신은 단지 비 기지의 경우에 디버깅 출력을 얻을 :
(0,1,[2,3,4,5,6,7,8,9,10])
(1,2,[3,4,5,6,7,8,9,10])
(3,3,[4,5,6,7,8,9,10])
(6,4,[5,6,7,8,9,10])
(10,5,[6,7,8,9,10])
(15,6,[7,8,9,10])
(21,7,[8,9,10])
(28,8,[9,10])
(36,9,[10])
(45,10,[])
55
YMMV합니다.
가능한 복제본 [하스켈에서 호출 스택을 얻는 방법은 무엇입니까?] (http://stackoverflow.com/questions/3220869/how-do-i-get-a-callstack-in-haskell) – rampion
그것의 중복. – jrockway