No, not at all !
Abstractions and good practices can of course reduce the risks of errors. For example:
language abstractions let the compiler generate code, that you would have to write yourself otherwise. For example, the C++ object model ensures that object constructed are destroyed as they supposed to be, without extra care on your shoulders;
these abstractions allow to build safer constructs that you can use in your code, such as RAII, or smart pointerssmart pointers that considerably alleviate the tasks related to memory management;
a rich container librarycontainer library and a powerful algorithm librarypowerful algorithm library further avoidsavoid that you have to write a lot of error prone code yourself by using already tested and highly optimized implementations.
But all this will only reduce probability of bugs. It will never eliminate thembugs completely. So you will continue to use the debugger and log files to chase them.