| -*- rst -*- |
| This is a collection of tests to check debugging information generated by |
| compiler. This test suite can be checked out inside clang/test folder. This |
| will enable 'make test' for clang to pick up these tests. |
| |
| Some tests (in the 'llgdb-tests' directory) are written with debugger |
| commands and checks for the intended debugger output in the source file, |
| using DEBUGGER: and CHECK: as prefixes respectively. |
| |
| For example:: |
| |
| define i32 @f1(i32 %i) nounwind ssp { |
| ; DEBUGGER: break f1 |
| ; DEBUGGER: r |
| ; DEBUGGER: p i |
| ; CHECK: $1 = 42 |
| entry: |
| } |
| |
| is a testcase where the debugger is asked to break at function 'f1' and |
| print value of argument 'i'. The expected value of 'i' is 42 in this case. |
| |
| Other tests are written for use with the 'Dexter' tool (in the 'dexter-tests' |
| and 'dexter' directories respectively). These use a domain specific language |
| in comments to describe the intended debugger experience in a more abstract |
| way than debugger commands. This allows for testing integration across |
| multiple debuggers from one input language. |
| |
| For example:: |
| |
| void __attribute__((noinline, optnone)) bar(int *test) {} |
| int main() { |
| int test; |
| test = 23; |
| bar(&test); // DexLabel('before_bar') |
| return test; // DexLabel('after_bar') |
| } |
| |
| // DexExpectWatchValue('test', '23', on_line='before_bar') |
| // DexExpectWatchValue('test', '23', on_line='after_bar') |
| |
| Labels two lines with the names 'before_bar' and 'after_bar', and records that |
| the 'test' variable is expected to have the value 23 on both of them. |