1. A method for debugging optimized code, the method comprising the steps of: in response to receiving a source code of a program, generating, by one or more processors, a FAT binary, wherein the FAT binary contains a binary and an intermediate code; determining, by one or more computer processors, whether a debugger is enabled; in response to determining that the debugger is not enabled, passing, by one or more computer processors, the intermediate code to a program; in response to passing, by one or more computer processors, the intermediate code to the program, generating, by the program, an optimized native code; in response to generating an optimized native code, loading, by one or more computer processors, the generated optimized native code; and wherein: the binary is a non-optimized native code for a single processor architecture. the intermediate code is an internal representation of the source code, and contains all semantic information of the source code such that a user may perform optimizations on the intermediate code; loading the generated binary into a memory is based on a determination of an enhanced loader whether to load a non-optimized native code or an optimized native code; the optimized native code is optimized source code for a single processor architecture; and the program transforms the intermediate code into the optimized native code.