I want to create a core dump whenever my process crashes. Currently I am following this approach:
- Build a special "debug" version of the program using "-g" of gcc/g++.
- Execute "ulimit -c unlimited"
- Now we get the core dump whenever the program crashes.
But I want to minimize the number of steps so that:
- Core dump should always get created. Even if it is "release" build. The user should not be asked to execute the command "
ulimit -c unlimited
" manually. - That core dump's backtrace should be able to give the file, function, line number of the calls. That is stack trace in a human readable form.
- I don't want to build the program as a debug build with "-g". Or at least it shouldn't contain any other debugging information which is not required to produce the human readable stack trace. Because this would be a release build of the program.
So I have two questions:
- How to create a core dump in the "release" build of a program?
- Always. Without manually executing the "
ulimit -c unlimited
"