% cat testdiv2.c
main() {
       int i;
       i = div2(-1);
       printf("-1/2 = %d\n", i);
}
div2(i) {
       int j;
       j = i>>1;
       return(j);
}

% cc -g testdiv2.c

% a.out
-1/2 = -1

% sdb
No core image                   # Warning message from sdb
*/^div2                         # Search for procedure "div2"
6: div2(i) {                    # It starts at line 6
*z                              # Print the next few lines
6: div2(i) {
7:      int j;
8:      j = i>>1;
9:      return(j);
10: }
*div2:b                         # Place a breakpoint at beginning of div2
div2:8 b                        # Sdb echoes proc name and line number
*r                              # Run the procedure
Breakpoint at                   # Execution stops just before line 8
div2:8:         j = i>>1;
*t                              # Print trace of subroutine calls
div2(-1)   [testdiv2.c:8]
main(1,2147483380,2147483388)   [testdiv2.c:3]
*i/                             # Print i
-1
*s                              # Single step
div2:9:         return(j);      # Execution stops just before line 9
*j/                             # Print j
-1
*8d                             # Delete the breakpoint
*div2(1)/                       # Try running div2 with different args
0
*div2(-2)/
-1
*div2(-3)/
-2
*q                              # Exit sdb