Clean up everything from the site collection down. Use SharePoint manager and ensure that the event receiver is being attached to the library. Most probably, it is not being properly attached and therefore never even executing. PS: Ensure that the .DLL files are being copied to GAC. If it's not being attached to the library, you can try for example to attach the event receiver to a content type, and create a list of that content type AFTER attaching. Make sure you update the list and so on afterwards and finally attach the debugger. You can then try to activate the feature manually.
Also try using tools such as CKS Dev, right click on your project which contains the event receiver assemblies and select "Attach to all IIS worker processes". This attaches to all w3wp.exe processes and sometimes works when start doesn't.
EDIT: Instead of CKS Dev, which works only half of the time and is slow (since it attaches to all w3wp.exe processes instead of just the SharePoint app pools), here's this script which I made that I've had lots of success with:
# ---------------------------------------------------------
# Read Arguments from Visual Studio & Setting Configuration
$SolutionDir = "C:\SolutionPath\"
$Namespace = "..." #$TargetName
$GACUtilPath = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe"
# ----------------------------------
#
$webURL = "http://portal.app.local/" #Web app URL for warmup.
cls
echo "Installing DLLs in GAC..."
echo "*************************************************"
echo ""
echo "Installing DLL..."
Start-Process -NoNewWindow -Wait -FilePath $GACUtilPath -ArgumentList "/i `"$SolutionDir\ProjectName\bin\debug\dllName.dll`""
echo "...ready!"
echo ""
function PrintSPWorker()
{
$worker = C:\windows\system32\inetsrv\appcmd list wp
$worker.Split("`r`n") | % {
if ($_.contains("SharePoint")){
write-host Please attach to PID: $_ -ForegroundColor Green
}
}
}
C:\windows\system32\inetsrv\appcmd recycle apppool "SharePoint App Pool"
start-sleep 2 #Wait for the app pool to start.
#WARMUP FUNCTION
write-host "Warming up..."
for ($i =0; $i -lt 5; $i++)
{
$r = Invoke-WebRequest -URI $webURL -UseDefaultCredentials
$r.StatusCode
}
write-host "Done."
$date = Get-Date
PrintSPWorker
write-host "Finished at $date"