The challenge with teaching local versus global variables is explaining "why". Why aren't all variables global? In the small, relatively simple programs our kids are writing for APCSP, it's hard to understand why global variables are frowned on, generally. Which makes the local vs global discussion feel arbitrary, some made-up rule just to complicate things. It's not hard to demonstrate how global and local variables behave, but it's not easy to explain the "why" when kids are working on short, self-contained programs by themselves, where they can easily control variable names and assignments.
As for abstraction, I think the AP (and code.org) get a little too philosophical. My kids understand why one should write a function to save on repetition, and simplify program structure. They can easily answer the question, "what's the value of a function?" But if I ask them to explain why a function is an example of an abstraction, they get twisted up in the vagueness of the meaning of "abstraction". It reminds me of the discussion of symbolism in literature, and what the light at the end of the dock in Gatsby means
Most of my teaching of debugging was over-the-shoulder, and hands on. Showing kids how to use things like console.log to figure out what the variable was really set to, and commenting out blocks of code to figure out what part of their program was actually having trouble. When I did find an interesting problem in a kid's code I'd often throw it up on the big screen, and have the class try to figure out what was going wrong. And there was a lot of peer debugging going on, with seat mates.