How do you debug and troubleshoot complex hardware-software integration issues using debuggers, compilers, and diagnostic test strategies?