#include <tuple>
#include <boost/functional/hash.hpp>
+#include <boost/algorithm/string/replace.hpp>
#include <dlfcn.h>
#include <unistd.h>
string outputFileName = env("DUMP_MALLOC_TRACE_OUTPUT");
if (outputFileName.empty()) {
// env var might not be set when linked directly into an executable
- outputFileName = "malloctrace.";
+ outputFileName = "malloctrace.$$";
+ } else if (outputFileName == "-" || outputFileName == "stdout") {
+ out = stdout;
+ } else if (outputFileName == "stderr") {
+ out = stderr;
+ }
+
+ if (!out) {
+ boost::replace_all(outputFileName, "$$", to_string(getpid()));
+ out = fopen(outputFileName.c_str(), "w");
}
- outputFileName += to_string(getpid());
- out = fopen(outputFileName.c_str(), "wa");
if (!out) {
fprintf(stderr, "Failed to open output file: %s\n", outputFileName.c_str());
exit(1);
exit 1
fi
-output=$(pwd)/malloctrace.$(basename $1).
+output=$(pwd)/malloctrace.$(basename $1).\$\$
cb
echo "starting application, this might take some time..."
if [ -z "$debug" ]; then
- LD_PRELOAD=./libmalloctrace.so DUMP_MALLOC_TRACE_OUTPUT="$output" $@ &
+ LD_PRELOAD=./libmalloctrace.so DUMP_MALLOC_TRACE_OUTPUT="$output" $@
else
gdb --eval-command="set environment LD_PRELOAD=./libmalloctrace.so" \
--eval-command="set environment DUMP_MALLOC_TRACE_OUTPUT=$output" \
--eval-command="run" --args $@
fi
-
-pid=$!
-wait $pid
-
-exit 0
-
-if [[ "$(ls $output$pid 2> /dev/null)" != "" ]]; then
- echo "finished application, zipping data file"
- cd $(dirname $output)
- output=$(basename $output)$pid
- bzip2 "$output"
- du -h "$output.bz2"
-fi