131cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen//===-- main.c --------------------------------------------------*- C++ -*-===// 231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// 331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// The LLVM Compiler Infrastructure 431cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// 531cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// This file is distributed under the University of Illinois Open Source 631cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// License. See LICENSE.TXT for details. 731cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// 831cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen//===----------------------------------------------------------------------===// 931cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen#include <stdio.h> 1031cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 1131cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// This simple program is to demonstrate the capability of the lldb command 1231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// "breakpoint modify -c 'val == 3' breakpt-id" to break within c(int val) only 1331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen// when the value of the arg is 3. 1431cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 1531cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint a(int); 1631cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint b(int); 1731cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint c(int); 1831cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 1931cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint a(int val) 2031cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen{ 2131cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen if (val <= 1) 2231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen return b(val); 2331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen else if (val >= 3) 24f6bdb19538f490f754a5c052f6553b411c378ebbJohnny Chen return c(val); // Find the line number of c's parent call here. 2531cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 2631cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen return val; 2731cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen} 2831cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 2931cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint b(int val) 3031cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen{ 3131cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen return c(val); 3231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen} 3331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 3431cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint c(int val) 3531cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen{ 3631cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen return val + 3; // Find the line number of function "c" here. 3731cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen} 3831cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 3931cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chenint main (int argc, char const *argv[]) 4031cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen{ 4131cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen int A1 = a(1); // a(1) -> b(1) -> c(1) 4231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen printf("a(1) returns %d\n", A1); 4331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 4431cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen int B2 = b(2); // b(2) -> c(2) 4531cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen printf("b(2) returns %d\n", B2); 4631cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 4731cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen int A3 = a(3); // a(3) -> c(3) 4831cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen printf("a(3) returns %d\n", A3); 49d0f064d4e5ccef341ecbd6a462bbff5f085a3f77Sean Callanan 50d0f064d4e5ccef341ecbd6a462bbff5f085a3f77Sean Callanan for (int i = 0; i < 2; ++i) 51d0f064d4e5ccef341ecbd6a462bbff5f085a3f77Sean Callanan printf("Loop\n"); 5231cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen 5331cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen return 0; 5431cf8e24815c4a99d74b5bea50900ac8dfa2f40dJohnny Chen} 55