To profile an executable application with Perf and Hotspot on Linux do the following:
- Install Perf with the command
 
sudo apt install linux-perf
- Install Hotspot with the command
 
- Open Code::Blocks and go to Tools menu
 - Make click on Add to add a new tool
 - In Name put Perf Profiler
 - Create a .sh script with a name perf-profile.sh in a custom location
 - Add the following code to the script
 
#!/bin/bash
# Universal perf profiler for Code::Blocks 25.01
# Usage:
#   perf-profile.sh <executable_path> [lib_directory]
# If lib_directory is omitted, uses executable's directory.
PERF_OUTPUT_DIR="$HOME/PERF_DATA"
if [ $# -lt 1 ]; then
    echo "❌ Error: Missing executable path."
    echo "   Usage: $0 <executable> [lib_dir]"
    exit 1
fi
EXE_PATH="$1"
EXE_DIR="$(dirname "$EXE_PATH")"
EXE_NAME="$(basename "$EXE_PATH")"
if [ ! -f "$EXE_PATH" ]; then
    echo "❌ Executable not found: $EXE_PATH"
    exit 1
fi
# Determine lib directory
if [ $# -ge 2 ] && [ -n "$2" ]; then
    LIB_DIR="$2"
    echo "🧩 Using custom lib dir (arg): $LIB_DIR"
else
    LIB_DIR="$EXE_DIR"
    echo "🧩 Using executable's dir as lib dir: $LIB_DIR"
fi
if [ ! -d "$LIB_DIR" ]; then
    echo "⚠️  Warning: Library directory does not exist: $LIB_DIR"
fi
# Prepare output
mkdir -p "$PERF_OUTPUT_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
PERF_DATA_PATH="$PERF_OUTPUT_DIR/${EXE_NAME}_${TIMESTAMP}.perf.data"
echo "▶️  Profiling: $EXE_PATH"
echo "📂 Working dir: $EXE_DIR"
echo "💾 Perf data → $PERF_DATA_PATH"
cd "$EXE_DIR" || exit 1
export LD_LIBRARY_PATH="$LIB_DIR:$LD_LIBRARY_PATH"
perf record --call-graph dwarf -o "$PERF_DATA_PATH" \
  env LD_LIBRARY_PATH="$LIB_DIR:$LD_LIBRARY_PATH" "$EXE_PATH"
if [ -f "$PERF_DATA_PATH" ]; then
    echo "✅ Profiling done. Opening in Hotspot..."
    hotspot "$PERF_DATA_PATH" &
else
    echo "⚠️  No perf data generated."
fi
- On the script you can custom the path PERF_OUTPUT_DIR to any location you want to store the perf collected data (this data is large in size so take that in count)
 - Give execution permissions to the script with the command
 
- In Code::Blocks Tools on Executable browse to the script file
 - In Parameters add the following
 
$(TARGET_OUTPUT_FILE) /path/to/custom/libraries
- where the path to custom libraries is the path where the libraries referenced by the application to profile are located
 - We leave Working directory empty
 - Click OK to add the tool
 - Add sudo capabilities to perf with the command
 
sudo sysctl -w kernel.perf_event_paranoid=1
After doing all this we have the profiler Perf tool working in combination with Hotspot. To profile an application we activate a executable project rebuild all and then we go to Tools and click on the Perf Profiler, execute our application for a while and then close it to see the data analysis on Hotspot.