You advance a too far.
Code:
$gcc -g main.c
$ gdb -q a.out
Reading symbols from a.out...done.
(gdb) list
1 #include <stdio.h>
2
3 char *my_strcat(char *a, char *s_a);
4
5 int main(void){
6 char x1[30] = "a";
7 char x2[10] = "boy";
8 my_strcat(x1, x2);
9
10 printf("%s", x1 );
(gdb) b 10
Breakpoint 1 at 0x4005f3: file main.c, line 10.
(gdb) run
Starting program: /home/sc/Documents/a.out
Breakpoint 1, main () at main.c:10
10 printf("%s", x1 );
(gdb) p x1
$1 = "a\000boy", '\000' <repeats 24 times>
(gdb)
You append the string OK, but you appended it in the wrong place.
It's a good time to familiarise yourself with a debugger to help you figure out such things for yourself.