Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion utilitiesApp/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ INC += utilities.h win32_dirent.h ibexSeqPVmacros.h
# specify all source files to be compiled and added to the library
utilities_SRCS += iocname.cpp trimString.cpp ioccalc.cpp iocdcalc.cpp compress.cpp mkdir.cpp iocstringtest.cpp iocshHelpers.cpp
utilities_SRCS += FileList.cpp json.cpp dbLoadRecordsFuncs.cpp iocshCmdFuncs.cpp freeIPPort.cpp msgBox.cpp
utilities_SRCS_WIN32 += win32_dirent.c getProcessUptime.cpp putDbAndWait.cpp
utilities_SRCS_WIN32 += win32_dirent.c getProcessUptime.cpp putDbAndWait.cpp waitForDebugger.cpp

utilities_SRCS += find_calibration_range.c find_calibration_range_impl.cpp find_calibration_range_utils.cpp

Expand Down
1 change: 1 addition & 0 deletions utilitiesApp/src/utilities.dbd
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ registrar(dbLoadRecordsFuncsRegister)
registrar(iocshCmdFuncsRegister)
registrar(freeIPPortRegister)
registrar(msgBoxRegister)
registrar(waitForDebuggerRegister)
function(find_calibration_range)
2 changes: 2 additions & 0 deletions utilitiesApp/src/utilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ epicsShareFunc double getProcessUptime(const char* procExecutableName);

epicsShareFunc int putDbAndWait(const std::string& pvName, const void *value, double timeout);

epicsShareFunc int waitForDebugger(int timeout);

#ifdef _WIN32
#include "win32_dirent.h"
#else
Expand Down
88 changes: 88 additions & 0 deletions utilitiesApp/src/waitForDebugger.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include <exception>
#include <algorithm>
#include <stdexcept>
#include <iostream>
#include <map>
#include <list>
#include <string>
#include <time.h>
#include <sstream>
#include <fstream>
#ifndef _WIN32
#include <unistd.h>
#endif

#include "epicsStdlib.h"
#include "epicsString.h"
#include "epicsStdio.h"
#include "dbDefs.h"
#include "epicsMutex.h"
#include "dbBase.h"
#include "dbStaticLib.h"
#include "dbFldTypes.h"
#include "dbCommon.h"
#include "dbAccessDefs.h"
#include <epicsTypes.h>
#include <epicsTime.h>
#include <epicsThread.h>
#include <epicsString.h>
#include <epicsTimer.h>
#include <epicsMutex.h>
#include <iocsh.h>
#include "envDefs.h"
#include "macLib.h"
#include "errlog.h"
#include "pcrecpp.h"

#include <string.h>
#include <regex>
#include <registryFunction.h>

#include <epicsExport.h>

#include "utilities.h"

// 0 on success, -1 on timeout
epicsShareFunc int waitForDebugger(int timeout)
{
epicsTimeStamp start_time, current;
epicsTimeGetCurrent(&start_time);
while(true) {
if (IsDebuggerPresent()) {
return 0;
}
epicsTimeGetCurrent(&current);
if (timeout > 0 && epicsTimeDiffInSeconds(&current, &start_time) > timeout) {
return -1;
}
}
}

extern "C" {

// EPICS iocsh shell commands

static const iocshArg waitForDebuggerInitArg0 = { "timeout", iocshArgInt };
static const iocshArg * const waitForDebuggerInitArgs[] = { &waitForDebuggerInitArg0 };

static const iocshFuncDef waitForDebuggerDef = {"waitForDebugger", sizeof(waitForDebuggerInitArgs) / sizeof(iocshArg*), waitForDebuggerInitArgs};

static void waitForDebuggerInitCallFunc(const iocshArgBuf *args)
{
waitForDebugger(args[0].ival);
}

static void waitForDebuggerRegister(void)
{
iocshRegister(&waitForDebuggerDef, waitForDebuggerInitCallFunc);
}

epicsExportRegistrar(waitForDebuggerRegister); // need to be declared via registrar() in utilities.dbd too

}