forked from OSchip/llvm-project
Linux/FreeBSD local debugging: allow redirection to pts for POSIX process.
See http://reviews.llvm.org/D5135 for more details. Change by Zephyr Zhao. llvm-svn: 217382
This commit is contained in:
parent
bdbca15ccd
commit
6a2f62cbd3
|
@ -176,9 +176,9 @@ ProcessPOSIX::WillLaunch(Module* module)
|
|||
}
|
||||
|
||||
const char *
|
||||
ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const char *default_path)
|
||||
ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const char *default_path,
|
||||
const char *dbg_pts_path)
|
||||
{
|
||||
const char *pts_name = "/dev/pts/";
|
||||
const char *path = NULL;
|
||||
|
||||
if (file_action)
|
||||
|
@ -190,11 +190,11 @@ ProcessPOSIX::GetFilePath(const lldb_private::FileAction *file_action, const cha
|
|||
// (/dev/pts). If so, convert to using a different default path
|
||||
// instead to redirect I/O to the debugger console. This should
|
||||
// also handle user overrides to /dev/null or a different file.
|
||||
if (!path || ::strncmp(path, pts_name, ::strlen(pts_name)) == 0)
|
||||
if (!path || (dbg_pts_path &&
|
||||
::strncmp(path, dbg_pts_path, ::strlen(dbg_pts_path)) == 0))
|
||||
path = default_path;
|
||||
}
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
@ -224,14 +224,16 @@ ProcessPOSIX::DoLaunch (Module *module,
|
|||
const char *stdout_path = NULL;
|
||||
const char *stderr_path = NULL;
|
||||
|
||||
const char * dbg_pts_path = launch_info.GetPTY().GetSlaveName(NULL,0);
|
||||
|
||||
file_action = launch_info.GetFileActionForFD (STDIN_FILENO);
|
||||
stdin_path = GetFilePath(file_action, stdin_path);
|
||||
stdin_path = GetFilePath(file_action, stdin_path, dbg_pts_path);
|
||||
|
||||
file_action = launch_info.GetFileActionForFD (STDOUT_FILENO);
|
||||
stdout_path = GetFilePath(file_action, stdout_path);
|
||||
stdout_path = GetFilePath(file_action, stdout_path, dbg_pts_path);
|
||||
|
||||
file_action = launch_info.GetFileActionForFD (STDERR_FILENO);
|
||||
stderr_path = GetFilePath(file_action, stderr_path);
|
||||
stderr_path = GetFilePath(file_action, stderr_path, dbg_pts_path);
|
||||
|
||||
m_monitor = new ProcessMonitor (this,
|
||||
module,
|
||||
|
|
|
@ -154,7 +154,8 @@ public:
|
|||
ProcessMonitor &
|
||||
GetMonitor() { assert(m_monitor); return *m_monitor; }
|
||||
|
||||
const char *GetFilePath(const lldb_private::FileAction *file_action, const char *default_path);
|
||||
const char *GetFilePath(const lldb_private::FileAction *file_action, const char *default_path,
|
||||
const char *dbg_pts_path);
|
||||
|
||||
/// Stops all threads in the process.
|
||||
/// The \p stop_tid parameter indicates the thread which initiated the stop.
|
||||
|
|
Loading…
Reference in New Issue