Index: debuggergdb.cpp
===================================================================
--- debuggergdb.cpp (revision 3659)
+++ debuggergdb.cpp (working copy)
@@ -233,6 +233,10 @@
{
NotifyMissingFile(_T("debugger.zip"));
}
+ // vars for Linux console //(pecan 2007/2/06)
+ m_bIsConsole = false;
+ m_nConsolePid = 0;
+ m_ConsoleTty = wxEmptyString;
}
DebuggerGDB::~DebuggerGDB()
@@ -1021,6 +1025,21 @@
m_State.GetDriver()->Prepare(target && target->GetTargetType() == ttConsoleOnly);
m_State.ApplyBreakpoints();
+ #ifdef __WXGTK__ //(pecan 2007/2/05)
+ // create xterm and issue tty "/dev/pts/#" to GDB where
+ // # is the tty for the newly created xterm
+ m_bIsConsole = (target && target->GetTargetType() == ttConsoleOnly);
+ if (m_bIsConsole)
+ {
+ if (RunNixConsole() > 0 )
+ { wxString gdbTtyCmd;
+ gdbTtyCmd << wxT("tty ") << m_ConsoleTty;
+ m_State.GetDriver()->QueueCommand(new DebuggerCmd(m_State.GetDriver(), gdbTtyCmd, true));
+ DebugLog(wxString::Format( _("Queued:[%s]"), gdbTtyCmd.c_str()) );
+ }
+ }//if
+ #endif//def __WXGTK__
+
// Don't issue 'run' if attaching to a process (Bug #1391904)
if (m_PidToAttach == 0)
m_State.GetDriver()->Start(m_BreakOnEntry);
@@ -1503,12 +1522,21 @@
void DebuggerGDB::Stop()
{
+ // m_Process is PipedProcess I/O; m_Pid is debugger pid
if (m_pProcess && m_Pid)
{
if (IsStopped())
{
RunCommand(CMD_STOP);
m_pProcess->CloseOutput();
+ #ifdef __WXGTK__
+ // kill any linux console //(pecan 2007/2/06)
+ if ( m_bIsConsole && (m_nConsolePid > 0) )
+ {
+ ::wxKill(m_nConsolePid);
+ m_nConsolePid = 0;
+ }
+ #endif
}
else
{
@@ -2196,3 +2224,101 @@
{
Configure();
}
+// ----------------------------------------------------------------------------
+int DebuggerGDB::RunNixConsole()
+// ----------------------------------------------------------------------------
+{
+ // start the xterm and put the shell to sleep with -e sleep 80000
+ // fetch the xterm tty so we can issue to gdb a "tty /dev/pts/#"
+ // redirecting program stdin/stdout/stderr to the xterm console.
+
+ #ifndef __WXMSW__
+ wxString cmd;
+ wxString title = wxT("Program Console");
+ m_nConsolePid = 0;
+ // for non-win platforms, use m_ConsoleTerm to run the console app
+ wxString term = Manager::Get()->GetConfigManager(_T("app"))->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM);
+ //term.Replace(_T("$TITLE"), _T("'") + _T("*nixConsole") + _T("'"));
+ term.Replace(_T("$TITLE"), _T("'") + title + _T("'"));
+ cmd << term << _T(" ");
+ cmd << wxT("sleep ");
+ cmd << 80000 + ::wxGetProcessId(); //make a unique sleep command
+
+ Manager::Get()->GetMacrosManager()->ReplaceEnvVars(cmd);
+ //Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Executing: %s"), cmd.c_str() );
+ DebugLog(wxString::Format( _("Executing: %s"), cmd.c_str()) );
+ //start xterm -e sleep {some unique # of seconds}
+ m_nConsolePid = wxExecute(cmd, wxEXEC_ASYNC);
+ if (m_nConsolePid <= 0) return -1;
+
+ // Issue the PS command to get the /dev/tty device name
+ // First, wait for the xterm to settle down, else PS won't see the sleep task
+ Manager::Yield();
+ ::wxSleep(1);
+ m_ConsoleTty = GetConsoleTty(m_nConsolePid);
+ if (not m_ConsoleTty.IsEmpty() )
+ return m_nConsolePid;
+ // failed to find the console tty
+ DebugLog( wxT("Console Execution error:failed to find console tty."));
+ ::wxKill(m_nConsolePid);
+ m_nConsolePid = 0;
+ #endif//ndef __WWXMSW__
+ return -1;
+}
+// ----------------------------------------------------------------------------
+wxString DebuggerGDB::GetConsoleTty(int ConsolePid)
+// ----------------------------------------------------------------------------
+{
+ // execute the ps -xo command and read PS output to get the /dev/tty field
+
+ unsigned long ConsPid = ConsolePid;
+ wxString psCmd;
+ wxArrayString psOutput;
+ wxArrayString psErrors;
+
+ psCmd << wxT("ps x -o tty,pid,command");
+ DebugLog(wxString::Format( _("Executing: %s"), psCmd.c_str()) );
+ int result = wxExecute(psCmd, psOutput, psErrors, wxEXEC_SYNC);
+ psCmd.Clear();
+ if (result != 0)
+ { psCmd << wxT("Result of ps x:") << result;
+ DebugLog(wxString::Format( _("Execution Error:"), psCmd.c_str()) );
+ return wxEmptyString;
+ }
+
+ wxString ConsTtyStr;
+ wxString ConsPidStr;
+ ConsPidStr << ConsPid;
+ //find task with our unique sleep time
+ wxString uniqueSleepTimeStr;
+ uniqueSleepTimeStr << wxT("sleep ") << 80000 + ::wxGetProcessId();
+ // search the output of "ps pid" command
+ int knt = psOutput.GetCount();
+ for (int i=knt-1; i>-1; --i)
+ { psCmd = psOutput.Item(i);
+ DebugLog(wxString::Format( _("PS result: %s"), psCmd.c_str()) );
+ // find the pts/# or tty/# or whatever it's called
+ // by seaching the output or out "ps x" command.
+ // The output of ps looks like:
+ // TT PID COMMAND
+ // pts/0 13342 /bin/sh ./run.sh
+ // pts/0 13343 /home/pecan/devel/trunk/src/devel/codeblocks
+ // pts/0 13361 /usr/bin/gdb -nx -fullname -quiet -args ./conio
+ // pts/0 13362 xterm -font -*-*-*-*-*-*-20-*-*-*-*-*-*-* -T Program Console -e sleep 93343
+ // pts/2 13363 sleep 93343
+ // ? 13365 /home/pecan/proj/conio/conio
+ // pts/1 13370 ps x -o tty,pid,command
+
+ if (psCmd.Contains(uniqueSleepTimeStr))
+ { // found sleep 93343 string, extract tty field
+ ConsTtyStr = wxT("/dev/") + psCmd.BeforeFirst(' ');
+ DebugLog(wxString::Format( _("TTY is[%s]"), ConsTtyStr.c_str()) );
+ return ConsTtyStr;
+ }//if
+ }//for
+
+ knt = psErrors.GetCount();
+ for (int i=0; i<knt; ++i)
+ DebugLog(wxString::Format( _("PS Error:%s"), psErrors.Item(i).c_str()) );
+ return wxEmptyString;
+}
Index: debuggergdb.h
===================================================================
--- debuggergdb.h (revision 3659)
+++ debuggergdb.h (working copy)
@@ -205,6 +205,13 @@
int m_HookId; // project loader hook ID
+ // Linux console support
+ int RunNixConsole();
+ wxString GetConsoleTty(int ConsolePid);
+ bool m_bIsConsole;
+ int m_nConsolePid;
+ wxString m_ConsoleTty;
+
DECLARE_EVENT_TABLE()
};
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int upstring(char *value);
int main()
{
//asm("int3");
char value[81]={'\0'};
int upper_count;
// perform i/o operation
do
{ cout << "Please type in a String (max. 80 characters): ";
cin.getline(value, 80);
//strcpy(value,"FakeReply");
upper_count = upstring(value);
cout << upper_count << " characters are converted" << endl;
cout << "The new string is now: " << value << endl;
if ( (strlen(value) >3) && (0==strncmp(value,"LOOP",4) ))
break;
}while(upper_count);
// perform infinite loop if user entered text "loop"
if ( (strlen(value) >3) && (0==strncmp(value,"LOOP",4)) )
{
int i = 0;
while(true){
cout<<".";cout.flush();
++i;
sleep(1);
}
}
return EXIT_SUCCESS;
}
int upstring(char *value)
{
int i=0;
while(*value)
{
if(islower(*value))
{
*value=toupper(*value);
i++;
}
value++;
}
return(i);
}
-------------- Build: Debug in test ---------------
Compiling: test.cpp
Linking console executable: bin/Debug/test
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 2
Minor opcode: 0
Resource id: 0x1000009
Building to ensure sources are up-to-date
Build succeeded
Selecting target: Debug
Adding source dir: /home/mark/test/
Adding source dir: /home/mark/test/
Adding file: bin/Debug/test
Starting debugger: done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb 6.5
At /home/mark/test/test.cpp:18
At /home/mark/test/test.cpp:19
Command-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/test
Working dir : /home/mark/test/
> set prompt >>>>>>cb_gdb:
Executing: xterm -T 'Program Console' -e sleep
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/test/test.cpp:17"
Breakpoint 1 at 0x8048a5b: file /home/mark/test/test.cpp, line 17.
>>>>>>cb_gdb:
Executing: ps x -o tty,pid,command
PS result: ? 27347 gaim
PS result: ? 27119 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kdevelopKzOKsa.slave-socket
PS result: ? 25985 konqueror [kdeinit] --silent
PS result: ? 20333 /usr/local/apps/firefox/firefox-bin
PS result: ? 20328 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 20325 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 15990 xchat
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: ? 3253 ps x -o tty,pid,command
PS result: ? 3240 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/test
PS result: ? 2537 codeblocks
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1644 superkaramba -session 108f363330000117290000100000036900010_1173329213_704426
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: pts/1 559 -bash
PS result: ? 558 konsole [kdeinit] --ls
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 2 at 0x8048a44: file /home/mark/test/test.cpp, line 13.
main () at /home/mark/test/test.cpp:13
/home/mark/test/test.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 3254.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Breakpoint 1, main () at /home/mark/test/test.cpp:18
/home/mark/test/test.cpp:18:243:beg:0x8048a5b
>>>>>>cb_gdb:
> info locals
value = '\0' <repeats 80 times>
upper_count = -1208292500
>>>>>>cb_gdb:
> info args
No arguments.
>>>>>>cb_gdb:
> next
/home/mark/test/test.cpp:19:309:beg:0x8048a70
>>>>>>cb_gdb:
> info locals
value = '\0' <repeats 80 times>
upper_count = -1208292500
>>>>>>cb_gdb:
> info args
No arguments.
>>>>>>cb_gdb:
> next
Please type in a String (max. 80 characters):
Program received signal SIGINT, Interrupt.
0xb7e1846e in __read_nocancel () from /lib/tls/libc.so.6
>>>>>>cb_gdb:
> info locals
No symbol table info available.
>>>>>>cb_gdb:
> info args
No symbol table info available.
>>>>>>cb_gdb:
> quit
CodeCommand-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/test
Working dir : /home/mark/test/
> set prompt >>>>>>cb_gdb:
Executing: xterm -T 'Program Console' -e sleep
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/test/test.cpp:17"
Breakpoint 1 at 0x8048a5b: file /home/mark/test/test.cpp, line 17.
>>>>>>cb_gdb:
Executing: ps x -o tty,pid,command
PS result: ? 27347 gaim
PS result: ? 27119 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kdevelopKzOKsa.slave-socket
PS result: ? 25985 konqueror [kdeinit] --silent
PS result: ? 20333 /usr/local/apps/firefox/firefox-bin
PS result: ? 20328 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 20325 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 15990 xchat
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: ? 3253 ps x -o tty,pid,command
PS result: ? 3240 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/test
PS result: ? 2537 codeblocks
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1644 superkaramba -session 108f363330000117290000100000036900010_1173329213_704426
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: pts/1 559 -bash
PS result: ? 558 konsole [kdeinit] --ls
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 2 at 0x8048a44: file /home/mark/test/test.cpp, line 13.
main () at /home/mark/test/test.cpp:13
/home/mark/test/test.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 3254.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Breakpoint 1, main () at /home/mark/test/test.cpp:18
/home/mark/test/test.cpp:18:243:beg:0x8048a5b
>>>>>>cb_gdb:
> info locals
value = '\0' <repeats 80 times>
upper_count = -1208292500
>>>>>>cb_gdb:
> info args
No arguments.
>>>>>>cb_gdb:
> next
/home/mark/test/test.cpp:19:309:beg:0x8048a70
>>>>>>cb_gdb:
> info locals
value = '\0' <repeats 80 times>
upper_count = -1208292500
>>>>>>cb_gdb:
> info args
No arguments.
>>>>>>cb_gdb:
> next
Please type in a String (max. 80 characters):
Program received signal SIGINT, Interrupt.
0xb7e1846e in __read_nocancel () from /lib/tls/libc.so.6
>>>>>>cb_gdb:
> info locals
No symbol table info available.
>>>>>>cb_gdb:
> info args
No symbol table info available.
>>>>>>cb_gdb:
> quit
TT PID COMMAND
tty1 1514 -bash
tty1 1540 /bin/sh /usr/X11R6/bin/startx
tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -
tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
tty1 1569 /bin/sh /opt/kde/bin/startkde
? 1597 kdeinit Running...
? 1600 dcopserver [kdeinit] --nosid
? 1604 klauncher [kdeinit] --new-startup
? 1606 kded [kdeinit] --new-startup
tty1 1619 kwrapper ksmserver
? 1621 ksmserver [kdeinit]
? 1623 kwin [kdeinit] -session 108f363330000117208531500000062
? 1627 kdesktop [kdeinit]
? 1630 kicker [kdeinit]
? 1638 kaccess [kdeinit]
? 1642 superkaramba -session 108f36333000011728590840000002728
? 1644 superkaramba -session 108f36333000011729000010000003690
? 1645 superkaramba -session 108f36333000011729000030000003690
? 1694 konqueror [kdeinit] -session 108f3633300001173327676000
? 7962 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSO
? 8506 konsole [kdeinit] --ls
pts/1 8507 -bash
pts/1 8609 ps x -o tty,pid,command
? 12097 kio_uiserver [kdeinit]
? 15990 xchat
? 20325 /bin/sh /usr/local/apps/firefox/firefox
? 20328 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/loc
? 20333 /usr/local/apps/firefox/firefox-bin
? 25985 konqueror [kdeinit] --silent
? 27119 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSO
? 27347 gaim
// ----------------------------------------------------------------------------
int DebuggerGDB::RunNixConsole()
// ----------------------------------------------------------------------------
{
// start the xterm and put the shell to sleep with -e sleep 80000
// fetch the xterm tty so we can issue to gdb a "tty /dev/pts/#"
// redirecting program stdin/stdout/stderr to the xterm console.
#ifndef __WXMSW__
wxString cmd;
wxString title = wxT("Program Console");
m_nConsolePid = 0;
// for non-win platforms, use m_ConsoleTerm to run the console app
wxString term = Manager::Get()->GetConfigManager(_T("app"))->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM);
//term.Replace(_T("$TITLE"), _T("'") + _T("*nixConsole") + _T("'"));
term.Replace(_T("$TITLE"), _T("'") + title + _T("'"));
cmd << term << _T(" ");
cmd << wxT("sleep ");
cmd << 80000 + ::wxGetProcessId(); //make a unique sleep command
Manager::Get()->GetMacrosManager()->ReplaceEnvVars(cmd);
//Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Executing: %s"), cmd.c_str() );
DebugLog(wxString::Format( _("Executing: %s"), cmd.c_str()) );
bash-3.1$ ps x -o tty,pid,command
TT PID COMMAND
tty1 1514 -bash
tty1 1540 /bin/sh /usr/X11R6/bin/startx
tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /h
tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
tty1 1569 /bin/sh /opt/kde/bin/startkde
? 1597 kdeinit Running...
? 1600 dcopserver [kdeinit] --nosid
? 1604 klauncher [kdeinit] --new-startup
? 1606 kded [kdeinit] --new-startup
tty1 1619 kwrapper ksmserver
? 1621 ksmserver [kdeinit]
? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_117
? 1627 kdesktop [kdeinit]
? 1630 kicker [kdeinit]
? 1638 kaccess [kdeinit]
? 1642 superkaramba -session 108f363330000117285908400000027280029_11733
? 1644 superkaramba -session 108f363330000117290000100000036900010_11733
? 1645 superkaramba -session 108f363330000117290000300000036900011_11733
? 1694 konqueror [kdeinit] -session 108f36333000011733276760000007048003
? 4536 kompare -caption Kompare -icon kompare -miniicon kompare -o /home
? 8506 konsole [kdeinit] --ls
pts/1 8507 -bash
? 15990 xchat
? 20325 /bin/sh /usr/local/apps/firefox/firefox
? 20328 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/fi
? 20333 /usr/local/apps/firefox/firefox-bin
? 21972 konsole [kdeinit] --ls
pts/3 21973 -bash
? 22093 konsole [kdeinit] --ls
pts/4 22094 -bash
? 22316 xterm
pts/5 22318 bash
pts/5 22373 sleep 81234
? 22394 xterm
pts/6 22396 bash
pts/6 22459 ps x -o tty,pid,command
? 25985 konqueror [kdeinit] --silent
? 27347 gaim
bash-3.1$
// ----------------------------------------------------------------------------
int DebuggerGDB::RunNixConsole()
// ----------------------------------------------------------------------------
{
// start the xterm and put the shell to sleep with -e sleep 80000
// fetch the xterm tty so we can issue to gdb a "tty /dev/pts/#"
// redirecting program stdin/stdout/stderr to the xterm console.
#ifndef __WXMSW__
wxString cmd;
wxString title = wxT("Program Console");
m_nConsolePid = 0;
// for non-win platforms, use m_ConsoleTerm to run the console app
wxString term = Manager::Get()->GetConfigManager(_T("app"))->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM);
//term.Replace(_T("$TITLE"), _T("'") + _T("*nixConsole") + _T("'"));
term.Replace(_T("$TITLE"), _T("'") + title + _T("'"));
cmd << term << _T(" ");
cmd << wxT("sleep ");
cmd << 80000 + ::wxGetProcessId(); //make a unique sleep command
wxString sleepPid; sleepPid << 80000 + ::wxGetProcessId();
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_1 is[%s]"),sleepPid.c_str() ));
sleepPid = wxString::Format(wxT("%d"),80000+ ::wxGetProcessId());
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_2 is[%s]"),sleepPid.c_str() ));
Manager::Get()->GetMacrosManager()->ReplaceEnvVars(cmd);
//Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Executing: %s"), cmd.c_str() );
DebugLog(wxString::Format( _("Executing: %s"), cmd.c_str()) );
//start xterm -e sleep {some unique # of seconds}
m_nConsolePid = wxExecute(cmd, wxEXEC_ASYNC);
if (m_nConsolePid <= 0) return -1;
// Issue the PS command to get the /dev/tty device name
// First, wait for the xterm to settle down, else PS won't see the sleep task
Manager::Yield();
::wxSleep(1);
m_ConsoleTty = GetConsoleTty(m_nConsolePid);
if (not m_ConsoleTty.IsEmpty() )
{ // show what we found as tty
DebugLog(wxString::Format(wxT("GetConsoleTTY[%s]ConsolePid[%d]"),m_ConsoleTty.c_str(),m_nConsolePid));
return m_nConsolePid;
}
// failed to find the console tty
DebugLog( wxT("Console Execution error:failed to find console tty."));
if (m_nConsolePid != 0)::wxKill(m_nConsolePid);
m_nConsolePid = 0;
#endif//ndef __WWXMSW__
return -1;
}
// ----------------------------------------------------------------------------
wxString DebuggerGDB::GetConsoleTty(int ConsolePid)
// ----------------------------------------------------------------------------
{
// execute the ps x -o command and read PS output to get the /dev/tty field
unsigned long ConsPid = ConsolePid;
wxString psCmd;
wxArrayString psOutput;
wxArrayString psErrors;
psCmd << wxT("ps x -o tty,pid,command");
DebugLog(wxString::Format( _("Executing: %s"), psCmd.c_str()) );
int result = wxExecute(psCmd, psOutput, psErrors, wxEXEC_SYNC);
psCmd.Clear();
if (result != 0)
{ psCmd << wxT("Result of ps x:") << result;
DebugLog(wxString::Format( _("Execution Error:"), psCmd.c_str()) );
return wxEmptyString;
}
wxString ConsTtyStr;
wxString ConsPidStr;
ConsPidStr << ConsPid;
//find task with our unique sleep time
wxString uniqueSleepTimeStr;
uniqueSleepTimeStr << wxT("sleep ") << 80000 + ::wxGetProcessId();
// search the output of "ps pid" command
int knt = psOutput.GetCount();
for (int i=knt-1; i>-1; --i)
{ psCmd = psOutput.Item(i);
DebugLog(wxString::Format( _("PS result: %s"), psCmd.c_str()) );
// find the pts/# or tty/# or whatever it's called
// by seaching the output of "ps x -o tty,pid,command" command.
// The output of ps looks like:
// TT PID COMMAND
// pts/0 13342 /bin/sh ./run.sh
// pts/0 13343 /home/pecan/devel/trunk/src/devel/codeblocks
// pts/0 13361 /usr/bin/gdb -nx -fullname -quiet -args ./conio
// pts/0 13362 xterm -font -*-*-*-*-*-*-20-*-*-*-*-*-*-* -T Program Console -e sleep 93343
// pts/2 13363 sleep 93343
// ? 13365 /home/pecan/proj/conio/conio
// pts/1 13370 ps x -o tty,pid,command
if (psCmd.Contains(uniqueSleepTimeStr))
do
{ // check for correct "sleep" line
if (psCmd.Contains(wxT("-T"))) break; //error;wrong sleep line.
// found "sleep 93343" string, extract tty field
ConsTtyStr = wxT("/dev/") + psCmd.BeforeFirst(' ');
DebugLog(wxString::Format( _("TTY is[%s]"), ConsTtyStr.c_str()) );
return ConsTtyStr;
}while(0);//if do
}//for
knt = psErrors.GetCount();
for (int i=0; i<knt; ++i)
DebugLog(wxString::Format( _("PS Error:%s"), psErrors.Item(i).c_str()) );
return wxEmptyString;
}
Im sorry I dont understand clearly. The two routine code above, pasted into codeblocks does not compile on its own therefore no way for me to get debugging output.
I am in #codeblocks on irc.freenode.net if that would make things easier.
Command-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
Working dir : /home/mark/cb_test/
> set prompt >>>>>>cb_gdb:
Executing: xterm -T 'Program Console' -e sleep
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/cb_test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/cb_test/pecans.cpp:25"
Breakpoint 1 at 0x8048b31: file /home/mark/cb_test/pecans.cpp, line 25.
>>>>>>cb_gdb:
> break "/home/mark/test/test.cpp:18"
No source file named /home/mark/test/test.cpp.
Breakpoint 2 ("/home/mark/test/test.cpp:18) pending.
>>>>>>cb_gdb:
Executing: ps x -o tty,pid,command
PS result: ? 27347 gaim
PS result: ? 27298 ps x -o tty,pid,command
PS result: ? 27282 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
PS result: ? 24807 codeblocks
PS result: ? 15990 xchat
PS result: ? 13294 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/ark8vCrBa.slave-socket
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: pts/1 7619 -bash
PS result: ? 7606 konsole [kdeinit] --ls
PS result: ? 3678 /usr/local/apps/firefox/firefox-bin
PS result: ? 3672 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 3669 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: ? 987 java -Xms16m -Xmx128m -cp /usr/local/apps/azureus/Azureus2.jar:/usr/local/apps/azureus/swt.jar -Djava.library.path=/usr/local/apps/azureus -Dazureus.install.path=/usr/local/apps/azureus org.gudy.azureus2.ui.swt.Main /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: ? 961 /bin/bash /usr/local/apps/azureus/azureus /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 3 at 0x8048a44: file /home/mark/cb_test/pecans.cpp, line 13.
main () at /home/mark/cb_test/pecans.cpp:13
/home/mark/cb_test/pecans.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 27299.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Please type in a String (max. 80 characters):
wxString sleepPid; sleepPid << 80000 + ::wxGetProcessId();
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_1 is[%s]"),sleepPid.c_str() ));
sleepPid = wxString::Format(wxT("%d"),80000+ ::wxGetProcessId());
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_2 is[%s]"),sleepPid.c_str() ));
Command-line: /usr/bin/gdb -nx -fullname -quiet -args ./conio
Working dir : /home/pecan/proj/conio/
> set prompt >>>>>>cb_gdb:
RunNixConsole.SleepPid_1 is[82576]
RunNixConsole.SleepPid_2 is[82576]
Executing: xterm -font -*-*-*-*-*-*-20-*-*-*-*-*-*-* -T 'Program Console' -e sleep 82576
Using host libthread_db library "/lib/libthread_db.so.1".
Command-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
Working dir : /home/mark/cb_test/
> set prompt >>>>>>cb_gdb:
Executing: xterm -T 'Program Console' -e sleep
Executing: ps x -o tty,pid,command
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/cb_test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/cb_test/pecans.cpp:25"
Breakpoint 1 at 0x8048b31: file /home/mark/cb_test/pecans.cpp, line 25.
>>>>>>cb_gdb:
PS result: ? 27347 gaim
PS result: ? 15990 xchat
PS result: ? 15942 ps x -o tty,pid,command
PS result: ? 15930 [xterm] <defunct>
PS result: ? 15929 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
PS result: ? 15749 codeblocks
PS result: ? 13294 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/ark8vCrBa.slave-socket
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: pts/1 7619 -bash
PS result: ? 7606 konsole [kdeinit] --ls
PS result: ? 3678 /usr/local/apps/firefox/firefox-bin
PS result: ? 3672 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 3669 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: ? 987 java -Xms16m -Xmx128m -cp /usr/local/apps/azureus/Azureus2.jar:/usr/local/apps/azureus/swt.jar -Djava.library.path=/usr/local/apps/azureus -Dazureus.install.path=/usr/local/apps/azureus org.gudy.azureus2.ui.swt.Main /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: ? 961 /bin/bash /usr/local/apps/azureus/azureus /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 2 at 0x8048a44: file /home/mark/cb_test/pecans.cpp, line 13.
main () at /home/mark/cb_test/pecans.cpp:13
/home/mark/cb_test/pecans.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 15950.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Please type in a String (max. 80 characters):
RunNixConsole.SleepPid_1 is[82576]
RunNixConsole.SleepPid_2 is[82576]
Executing: xterm -T 'Program Console' -e sleep
Command-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
Working dir : /home/mark/cb_test/
> set prompt >>>>>>cb_gdb:
RunNixConsole.SleepPid_1 is[]
RunNixConsole.SleepPid_2 is[111252]
Executing: xterm -T 'Program Console' -e sleep
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/cb_test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/cb_test/pecans.cpp:25"
Breakpoint 1 at 0x8048b31: file /home/mark/cb_test/pecans.cpp, line 25.
>>>>>>cb_gdb:
Executing: ps x -o tty,pid,command
PS result: ? 31414 ps x -o tty,pid,command
PS result: ? 31401 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
PS result: ? 31252 codeblocks
PS result: ? 27347 gaim
PS result: ? 20407 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kateonNO0a.slave-socket
PS result: ? 20390 kate [kdeinit] /home/mark/codeblocks/trunk/src/plugins/debuggergdb/debuggergdb.cpp
PS result: ? 19946 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kwritepxMgnc.slave-socket
PS result: ? 19120 konqueror [kdeinit] --silent
PS result: ? 15990 xchat
PS result: ? 13294 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/ark8vCrBa.slave-socket
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: pts/1 7619 -bash
PS result: ? 7606 konsole [kdeinit] --ls
PS result: ? 3678 /usr/local/apps/firefox/firefox-bin
PS result: ? 3672 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 3669 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: ? 987 java -Xms16m -Xmx128m -cp /usr/local/apps/azureus/Azureus2.jar:/usr/local/apps/azureus/swt.jar -Djava.library.path=/usr/local/apps/azureus -Dazureus.install.path=/usr/local/apps/azureus org.gudy.azureus2.ui.swt.Main /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: ? 961 /bin/bash /usr/local/apps/azureus/azureus /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 2 at 0x8048a44: file /home/mark/cb_test/pecans.cpp, line 13.
main () at /home/mark/cb_test/pecans.cpp:13
/home/mark/cb_test/pecans.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 31419.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Please type in a String (max. 80 characters):
CodeCommand-line: /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
Working dir : /home/mark/cb_test/
> set prompt >>>>>>cb_gdb:
RunNixConsole.SleepPid_1 is[]
RunNixConsole.SleepPid_2 is[111252]
Executing: xterm -T 'Program Console' -e sleep
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) >>>>>>cb_gdb:
> show version
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux".
>>>>>>cb_gdb:
> set confirm off
>>>>>>cb_gdb:
> set width 0
>>>>>>cb_gdb:
> set height 0
>>>>>>cb_gdb:
> set breakpoint pending on
>>>>>>cb_gdb:
> set print asm-demangle on
>>>>>>cb_gdb:
> set unwindonsignal on
>>>>>>cb_gdb:
> set disassembly-flavor att
>>>>>>cb_gdb:
> directory /home/mark/cb_test/
>>>>>>cb_gdb:
> delete breakpoints
>>>>>>cb_gdb:
> break "/home/mark/cb_test/pecans.cpp:25"
Breakpoint 1 at 0x8048b31: file /home/mark/cb_test/pecans.cpp, line 25.
>>>>>>cb_gdb:
Executing: ps x -o tty,pid,command
PS result: ? 31414 ps x -o tty,pid,command
PS result: ? 31401 /usr/bin/gdb -nx -fullname -quiet -args bin/Debug/cb_test
PS result: ? 31252 codeblocks
PS result: ? 27347 gaim
PS result: ? 20407 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kateonNO0a.slave-socket
PS result: ? 20390 kate [kdeinit] /home/mark/codeblocks/trunk/src/plugins/debuggergdb/debuggergdb.cpp
PS result: ? 19946 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/kwritepxMgnc.slave-socket
PS result: ? 19120 konqueror [kdeinit] --silent
PS result: ? 15990 xchat
PS result: ? 13294 kio_file [kdeinit] file /tmp/ksocket-mark/klauncherMOSOQb.slave-socket /tmp/ksocket-mark/ark8vCrBa.slave-socket
PS result: ? 12097 kio_uiserver [kdeinit]
PS result: pts/1 7619 -bash
PS result: ? 7606 konsole [kdeinit] --ls
PS result: ? 3678 /usr/local/apps/firefox/firefox-bin
PS result: ? 3672 /bin/sh /usr/local/apps/firefox/run-mozilla.sh /usr/local/apps/firefox/firefox-bin
PS result: ? 3669 /bin/sh /usr/local/apps/firefox/firefox
PS result: ? 1694 konqueror [kdeinit] -session 108f363330000117332767600000070480034_1173327676_271749
PS result: ? 1645 superkaramba -session 108f363330000117290000300000036900011_1173329213_704079
PS result: ? 1642 superkaramba -session 108f363330000117285908400000027280029_1173329213_704201
PS result: ? 1638 kaccess [kdeinit]
PS result: ? 1630 kicker [kdeinit]
PS result: ? 1627 kdesktop [kdeinit]
PS result: ? 1623 kwin [kdeinit] -session 108f363330000117208531500000062480000_1173329221_738408
PS result: ? 1621 ksmserver [kdeinit]
PS result: tty1 1619 kwrapper ksmserver
PS result: ? 1606 kded [kdeinit] --new-startup
PS result: ? 1604 klauncher [kdeinit] --new-startup
PS result: ? 1600 dcopserver [kdeinit] --nosid
PS result: ? 1597 kdeinit Running...
PS result: tty1 1569 /bin/sh /opt/kde/bin/startkde
PS result: tty1 1567 /bin/sh /usr/X11R6/lib/X11/xinit/xinitrc
PS result: tty1 1556 /usr/X11R6/bin/xinit /usr/X11R6/lib/X11/xinit/xinitrc -- -auth /home/mark/.serverauth.1540
PS result: tty1 1540 /bin/sh /usr/X11R6/bin/startx
PS result: tty1 1514 -bash
PS result: ? 987 java -Xms16m -Xmx128m -cp /usr/local/apps/azureus/Azureus2.jar:/usr/local/apps/azureus/swt.jar -Djava.library.path=/usr/local/apps/azureus -Dazureus.install.path=/usr/local/apps/azureus org.gudy.azureus2.ui.swt.Main /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: ? 961 /bin/bash /usr/local/apps/azureus/azureus /tmp/The.Departed.DVDRip.XviD-PUKKA.torrent
PS result: TT PID COMMAND
Console Execution error:failed to find console tty.
> start
Breakpoint 2 at 0x8048a44: file /home/mark/cb_test/pecans.cpp, line 13.
main () at /home/mark/cb_test/pecans.cpp:13
/home/mark/cb_test/pecans.cpp:13:142:beg:0x8048a44
>>>>>>cb_gdb:
> info program
Using the running image of child process 31419.
Program stopped at 0x8048a44.
It stopped at a breakpoint that has since been deleted.
Type "info stack" or "info registers" for more information.
>>>>>>cb_gdb:
> cont
Please type in a String (max. 80 characters):
// ----------------------------------------------------------------------------
int DebuggerGDB::RunNixConsole()
// ----------------------------------------------------------------------------
{
// start the xterm and put the shell to sleep with -e sleep 80000
// fetch the xterm tty so we can issue to gdb a "tty /dev/pts/#"
// redirecting program stdin/stdout/stderr to the xterm console.
#ifndef __WXMSW__
wxString cmd;
wxString title = wxT("Program Console");
m_nConsolePid = 0;
// for non-win platforms, use m_ConsoleTerm to run the console app
wxString term = Manager::Get()->GetConfigManager(_T("app"))->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM);
//term.Replace(_T("$TITLE"), _T("'") + _T("*nixConsole") + _T("'"));
term.Replace(_T("$TITLE"), _T("'") + title + _T("'"));
cmd << term << _T(" ");
cmd << wxT("sleep ");
//cmd << 80000 + ::wxGetProcessId(); //make a unique sleep command
wxString sleepPid; sleepPid << 80000 + ::wxGetProcessId();
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_1 is[%s]"),sleepPid.c_str() ));
sleepPid = wxString::Format(wxT("%d"),80000+ ::wxGetProcessId());
DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_2 is[%s]"),sleepPid.c_str() ));
cmd << sleepPid;
Manager::Get()->GetMacrosManager()->ReplaceEnvVars(cmd);
//Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Executing: %s"), cmd.c_str() );
DebugLog(wxString::Format( _("Executing: %s"), cmd.c_str()) );
//start xterm -e sleep {some unique # of seconds}
m_nConsolePid = wxExecute(cmd, wxEXEC_ASYNC);
if (m_nConsolePid <= 0) return -1;
// Issue the PS command to get the /dev/tty device name
// First, wait for the xterm to settle down, else PS won't see the sleep task
Manager::Yield();
::wxSleep(1);
m_ConsoleTty = GetConsoleTty(m_nConsolePid);
if (not m_ConsoleTty.IsEmpty() )
{ // show what we found as tty
DebugLog(wxString::Format(wxT("GetConsoleTTY[%s]ConsolePid[%d]"),m_ConsoleTty.c_str(),m_nConsolePid));
return m_nConsolePid;
}
// failed to find the console tty
DebugLog( wxT("Console Execution error:failed to find console tty."));
if (m_nConsolePid != 0)::wxKill(m_nConsolePid);
m_nConsolePid = 0;
#endif//ndef __WWXMSW__
return -1;
}
// ----------------------------------------------------------------------------
wxString DebuggerGDB::GetConsoleTty(int ConsolePid)
// ----------------------------------------------------------------------------
{
// execute the ps x -o command and read PS output to get the /dev/tty field
unsigned long ConsPid = ConsolePid;
wxString psCmd;
wxArrayString psOutput;
wxArrayString psErrors;
psCmd << wxT("ps x -o tty,pid,command");
DebugLog(wxString::Format( _("Executing: %s"), psCmd.c_str()) );
int result = wxExecute(psCmd, psOutput, psErrors, wxEXEC_SYNC);
psCmd.Clear();
if (result != 0)
{ psCmd << wxT("Result of ps x:") << result;
DebugLog(wxString::Format( _("Execution Error:"), psCmd.c_str()) );
return wxEmptyString;
}
wxString ConsTtyStr;
wxString ConsPidStr;
ConsPidStr << ConsPid;
//find task with our unique sleep time
wxString uniqueSleepTimeStr;
uniqueSleepTimeStr << wxT("sleep ") << 80000 + ::wxGetProcessId();
// search the output of "ps pid" command
int knt = psOutput.GetCount();
for (int i=knt-1; i>-1; --i)
{ psCmd = psOutput.Item(i);
DebugLog(wxString::Format( _("PS result: %s"), psCmd.c_str()) );
// find the pts/# or tty/# or whatever it's called
// by seaching the output of "ps x -o tty,pid,command" command.
// The output of ps looks like:
// TT PID COMMAND
// pts/0 13342 /bin/sh ./run.sh
// pts/0 13343 /home/pecan/devel/trunk/src/devel/codeblocks
// pts/0 13361 /usr/bin/gdb -nx -fullname -quiet -args ./conio
// pts/0 13362 xterm -font -*-*-*-*-*-*-20-*-*-*-*-*-*-* -T Program Console -e sleep 93343
// pts/2 13363 sleep 93343
// ? 13365 /home/pecan/proj/conio/conio
// pts/1 13370 ps x -o tty,pid,command
if (psCmd.Contains(uniqueSleepTimeStr))
do
{ // check for correct "sleep" line
if (psCmd.Contains(wxT("-T"))) break; //error;wrong sleep line.
// found "sleep 93343" string, extract tty field
ConsTtyStr = wxT("/dev/") + psCmd.BeforeFirst(' ');
DebugLog(wxString::Format( _("TTY is[%s]"), ConsTtyStr.c_str()) );
return ConsTtyStr;
}while(0);//if do
}//for
knt = psErrors.GetCount();
for (int i=0; i<knt; ++i)
DebugLog(wxString::Format( _("PS Error:%s"), psErrors.Item(i).c_str()) );
return wxEmptyString;
}
//uniqueSleepTimeStr << wxT("sleep ") << 80000 + ::wxGetProcessId();
uniqueSleepTimeStr << wxT("sleep ") << wxString::Format(wxT("%d"),80000 + ::wxGetProcessId());
// ----------------------------------------------------------------------------
int DebuggerGDB::RunNixConsole()
// ----------------------------------------------------------------------------
{
// start the xterm and put the shell to sleep with -e sleep 80000
// fetch the xterm tty so we can issue to gdb a "tty /dev/pts/#"
// redirecting program stdin/stdout/stderr to the xterm console.
#ifndef __WXMSW__
wxString cmd;
wxString title = wxT("Program Console");
m_nConsolePid = 0;
// for non-win platforms, use m_ConsoleTerm to run the console app
wxString term = Manager::Get()->GetConfigManager(_T("app"))->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM);
//term.Replace(_T("$TITLE"), _T("'") + _T("*nixConsole") + _T("'"));
term.Replace(_T("$TITLE"), _T("'") + title + _T("'"));
cmd << term << _T(" ");
cmd << wxT("sleep ");
cmd << wxString::Format(wxT("%d"),80000 + ::wxGetProcessId());
// Bug:
// Math in streamed strings on SlackWare does not work
//cmd << 80000 + ::wxGetProcessId(); //make a unique sleep command
//wxString sleepPid; sleepPid << 80000 + ::wxGetProcessId();
//DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_1 is[%s]"),sleepPid.c_str() ));
//sleepPid = wxString::Format(wxT("%d"),80000+ ::wxGetPro cessId());
//DebugLog(wxString::Format(wxT("RunNixConsole.SleepPid_2 is[%s]"),sleepPid.c_str() ));
Manager::Get()->GetMacrosManager()->ReplaceEnvVars(cmd);
//Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Executing: %s"), cmd.c_str() );
DebugLog(wxString::Format( _("Executing: %s"), cmd.c_str()) );
//start xterm -e sleep {some unique # of seconds}
m_nConsolePid = wxExecute(cmd, wxEXEC_ASYNC);
if (m_nConsolePid <= 0) return -1;
// Issue the PS command to get the /dev/tty device name
// First, wait for the xterm to settle down, else PS won't see the sleep task
Manager::Yield();
::wxSleep(1);
m_ConsoleTty = GetConsoleTty(m_nConsolePid);
if (not m_ConsoleTty.IsEmpty() )
{ // show what we found as tty
DebugLog(wxString::Format(wxT("GetConsoleTTY[%s]ConsolePid[%d]"),m_ConsoleTty.c_str(),m_nConsolePid));
return m_nConsolePid;
}
// failed to find the console tty
DebugLog( wxT("Console Execution error:failed to find console tty."));
if (m_nConsolePid != 0)::wxKill(m_nConsolePid);
m_nConsolePid = 0;
#endif//ndef __WWXMSW__
return -1;
}
// ----------------------------------------------------------------------------
wxString DebuggerGDB::GetConsoleTty(int ConsolePid)
// ----------------------------------------------------------------------------
{
// execute the ps x -o command and read PS output to get the /dev/tty field
unsigned long ConsPid = ConsolePid;
wxString psCmd;
wxArrayString psOutput;
wxArrayString psErrors;
psCmd << wxT("ps x -o tty,pid,command");
DebugLog(wxString::Format( _("Executing: %s"), psCmd.c_str()) );
int result = wxExecute(psCmd, psOutput, psErrors, wxEXEC_SYNC);
psCmd.Clear();
if (result != 0)
{ psCmd << wxT("Result of ps x:") << result;
DebugLog(wxString::Format( _("Execution Error:"), psCmd.c_str()) );
return wxEmptyString;
}
wxString ConsTtyStr;
wxString ConsPidStr;
ConsPidStr << ConsPid;
//find task with our unique sleep time
wxString uniqueSleepTimeStr;
//uniqueSleepTimeStr << wxT("sleep ") << 80000 + ::wxGetProcessId();
uniqueSleepTimeStr << wxT("sleep ") << wxString::Format(wxT("%d"),80000 + ::wxGetProcessId());
// search the output of "ps pid" command
int knt = psOutput.GetCount();
for (int i=knt-1; i>-1; --i)
{ psCmd = psOutput.Item(i);
DebugLog(wxString::Format( _("PS result: %s"), psCmd.c_str()) );
// find the pts/# or tty/# or whatever it's called
// by seaching the output of "ps x -o tty,pid,command" command.
// The output of ps looks like:
// TT PID COMMAND
// pts/0 13342 /bin/sh ./run.sh
// pts/0 13343 /home/pecan/devel/trunk/src/devel/codeblocks
// pts/0 13361 /usr/bin/gdb -nx -fullname -quiet -args ./conio
// pts/0 13362 xterm -font -*-*-*-*-*-*-20-*-*-*-*-*-*-* -T Program Console -e sleep 93343
// pts/2 13363 sleep 93343
// ? 13365 /home/pecan/proj/conio/conio
// pts/1 13370 ps x -o tty,pid,command
if (psCmd.Contains(uniqueSleepTimeStr))
do
{ // check for correct "sleep" line
if (psCmd.Contains(wxT("-T"))) break; //error;wrong sleep line.
// found "sleep 93343" string, extract tty field
ConsTtyStr = wxT("/dev/") + psCmd.BeforeFirst(' ');
DebugLog(wxString::Format( _("TTY is[%s]"), ConsTtyStr.c_str()) );
return ConsTtyStr;
}while(0);//if do
}//for
knt = psErrors.GetCount();
for (int i=0; i<knt; ++i)
DebugLog(wxString::Format( _("PS Error:%s"), psErrors.Item(i).c_str()) );
return wxEmptyString;
}