The reason is because the debugger has been told to ignore int3 instructions it has not placed itself.
Refer to the attachment.
Ensure that HandleDebugBreakInstruction IS NOT set to dboIgnoreAll. After that your int3s will break into the debugger.
However, note that other int3s will break into the debugger too. for instance, when debugging 32bit programs under Windows, ntdll has an int3 before giving control to the program being debugged. When it breaks there, you'll need to press F9. HOWEVER, because of the annoying int3 in ntdll, if you press F9 and you don't have a breakpoint set at the beginning of your code, execution won't stop at the program's entry point. The solution is to either manually place a breakpoint at the entry point or put a statement such as "if IsDebuggerPresent() then asm int3 end;" (note that IsDebuggerPresent() is a Windows only function, if you are using a different O/S, find out what the equivalent is.)
HTH.