Freigeben über


Attaching to a process without a dialog

In https://blogs.msdn.com/shaykatc/archive/2004/04/19/116222.aspx, Shaykat gave one alternative to the ntsd '-pn' option. I figured I would give two more.

Alternative #1 - Attach project. Open the exe as a project (File->Open->Project, then select the exe). Open project properties. Set the 'Attach' setting to 'yes'. Hit F5.

Alternative #2 - command script. It is pretty easy to write a script using tlist.exe that can attach to a process by name. The script is below. Hopefully in some future product, you will even be able to set an option to skip the JIT chooser dialog. Note: This only works for native debugging.

 @echo off
if "%1"=="-?" goto help
if "%1"=="/?" goto help
if "%1"=="" echo The syntax of the command is incorrect.& exit /b -1
if NOT "%2"=="" echo The syntax of the command is incorrect.& exit /b -1

call :find_file tlist.exe
if NOT %ERRORLEVEL%==0 exit /b %ERRORLEVEL%

if not exist "%CommonProgramFiles%\Microsoft Shared\VS7Debug\vs7jit.exe" echo Could not find vs7jit.exe & exit /b 1

setlocal
set __found=0
for /f "tokens=1,2" %%d in ('tlist.exe') do call :parse_process %1 %%e %%d
if %__found%==0 echo Process '%1' is not running
endlocal
exit /b 0

:parse_process
if /i "%1"=="%2" goto run_command
if /i "%1.exe"=="%2" goto run_command
exit /b 0

:run_command
set __found=1
call "%CommonProgramFiles%\Microsoft Shared\VS7Debug\vs7jit.exe" -p %3
exit /b 0

:find_file
if "%~$PATH:1"=="" if "%~z1" == "" echo Error! Could not find %1. & exit /b -1
exit /b 0

:help
echo attach.cmd ^<process_name^>
echo.
echo Debug a process with VS7/VS7.1.   example: attach.cmd notepad.exe
echo.

Comments

  • Anonymous
    April 22, 2004
    Didn't tlist die with the dinosaurs! TaskList rules! (XP & Win2K3 only)
  • Anonymous
    May 06, 2004
    Greg,

    In your first example you talk about opening the .exe as a project. Are you speaking of using VS.NET 7.1? I tried doing that but it would not let me choose an .exe. It just kept looking for *.vbproj, *.csproj, etc.

    Help
    D
  • Anonymous
    May 06, 2004
    Opening the exe as a project uses the C++ project system, so you need a SKU which supports the C++ project system.
  • Anonymous
    May 23, 2004
    Use a VS.net macro. MSDN has some sample on how to attach to a process by name.
  • Anonymous
    July 05, 2004
    I think your batch file is useful, but it doesn't work in Windows XP. So I modified it and now it works!

    @echo off
    if "%1"=="-?" goto help
    if "%1"=="/?" goto help
    if "%1"=="" echo The syntax of the command is incorrect.& exit /b -1
    if NOT "%2"=="" echo The syntax of the command is incorrect.& exit /b -1

    call :find_file tasklist.exe
    if NOT %ERRORLEVEL%==0 exit /b %ERRORLEVEL%

    if not exist "%CommonProgramFiles%Microsoft SharedVS7Debugvs7jit.exe" echo Could not find vs7jit.exe & exit /b 1

    setlocal
    set __found=0
    for /f "tokens=1,2" %%d in ('tasklist.exe') do call :parse_process %1 %%e %%d
    if %__found%==0 echo Process '%1' is not running
    endlocal
    exit /b 0

    :parse_process
    if /i "%1"=="%3" goto run_command
    if /i "%1.exe"=="%3" goto run_command
    exit /b 0

    :run_command
    set __found=1
    call "%CommonProgramFiles%Microsoft SharedVS7Debugvs7jit.exe" -p %2
    exit /b 0

    :find_file
    if "%~$PATH:1"=="" if "%~z1" == "" echo Error! Could not find %1. & exit /b -1
    exit /b 0

    :help
    echo attach.cmd ^<process_name^>
    echo.
    echo Debug a process with VS7/VS7.1. example: attach.cmd notepad.exe
    echo.
  • Anonymous
    August 02, 2004
    Opening an EXE as a project is done by the VC project system, so you need to have VC installed. As long as you have that it should 'just work' in 2002, 2003 or 2005 versions.