[Lldb-commits] [lldb] r374626 - [platform process list] add a flag for showing the processes of all users
Walter Erquinigo via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 11 19:08:35 PDT 2019
Author: wallace
Date: Fri Oct 11 19:08:35 2019
New Revision: 374626
URL: http://llvm.org/viewvc/llvm-project?rev=374626&view=rev
Log:
[platform process list] add a flag for showing the processes of all users
Summary:
For context: https://reviews.llvm.org/D68293
We need a way to show all the processes on android regardless of the user id.
When you run `platform process list`, you only see the processes with the same user as the user that launched lldb-server. However, it's quite useful to see all the processes, though, and it will lay a foundation for full apk debugging support from lldb.
Before:
```
PID PARENT USER TRIPLE NAME
====== ====== ========== ======================== ============================
3234 1 aarch64-unknown-linux-android adbd
8034 3234 aarch64-unknown-linux-android sh
9096 3234 aarch64-unknown-linux-android sh
9098 9096 aarch64-unknown-linux-android lldb-server
(lldb) ^D
```
Now:
```
(lldb) platform process list -x
205 matching processes were found on "remote-android"
PID PARENT USER TRIPLE NAME
====== ====== ========== ======================== ============================
1 0 init
524 1 init
525 1 init
531 1 ueventd
568 1 logd
569 1 aarch64-unknown-linux-android servicemanager
570 1 aarch64-unknown-linux-android hwservicemanager
571 1 aarch64-unknown-linux-android vndservicemanager
577 1 aarch64-unknown-linux-android qseecomd
580 577 aarch64-unknown-linux-android qseecomd
...
23816 979 com.android.providers.calendar
24600 979 com.verizon.mips.services
27888 979 com.hualai
28043 2378 com.android.chrome:sandboxed_process0
31449 979 com.att.shm
31779 979 com.samsung.android.authfw
31846 979 com.samsung.android.server.iris
32014 979 com.samsung.android.MtpApplication
32045 979 com.samsung.InputEventApp
```
Reviewers: labath,xiaobai,aadsm,clayborg
Subscribers:
llvm-svn: 374584
Added:
lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
Modified:
lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py
lldb/trunk/source/Commands/CommandObjectPlatform.cpp
lldb/trunk/source/Commands/Options.td
lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py?rev=374626&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/TestPlatformClient.py Fri Oct 11 19:08:35 2019
@@ -0,0 +1,39 @@
+import lldb
+import binascii
+import os
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+from gdbclientutils import *
+
+
+class TestPlatformClient(GDBRemoteTestBase):
+
+ def test_process_list_with_all_users(self):
+ """Test connecting to a remote linux platform"""
+
+ class MyResponder(MockGDBServerResponder):
+ def qfProcessInfo(self, packet):
+ if "all_users:1" in packet:
+ return "pid:10;ppid:1;uid:1;gid:1;euid:1;egid:1;name:" + binascii.hexlify("/a/test_process").decode() + ";"
+ else:
+ return "E04"
+
+ self.server.responder = MyResponder()
+
+ self.runCmd("log enable gdb-remote all")
+ self.runCmd("platform select remote-linux")
+
+ try:
+ url = "connect://localhost:%d" % self.server.port
+
+ # self.gdb.GetSelectedPlatform().ConnectRemote(lldb.SBPlatformConnectOptions(url))
+ self.runCmd("platform connect connect://localhost:%d" %
+ self.server.port)
+ self.assertTrue(self.dbg.GetSelectedPlatform().IsConnected())
+ self.expect("platform process list -x",
+ substrs=["1 matching process was found", "test_process"])
+ self.expect("platform process list",
+ error=True,
+ substrs=["error: no processes were found on the \"remote-linux\" platform"])
+ finally:
+ self.dbg.GetSelectedPlatform().DisconnectRemote()
Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py?rev=374626&r1=374625&r2=374626&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/gdb_remote_client/gdbclientutils.py Fri Oct 11 19:08:35 2019
@@ -3,6 +3,8 @@ import os.path
import threading
import socket
import lldb
+import binascii
+import traceback
from lldbsuite.support import seven
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbtest_config
@@ -160,9 +162,34 @@ class MockGDBServerResponder:
return self.QListThreadsInStopReply()
if packet.startswith("qMemoryRegionInfo:"):
return self.qMemoryRegionInfo()
+ if packet == "qQueryGDBServer":
+ return self.qQueryGDBServer()
+ if packet == "qHostInfo":
+ return self.qHostInfo()
+ if packet == "qGetWorkingDir":
+ return self.qGetWorkingDir()
+ if packet == "qsProcessInfo":
+ return self.qsProcessInfo()
+ if packet.startswith("qfProcessInfo"):
+ return self.qfProcessInfo(packet)
return self.other(packet)
+ def qsProcessInfo(self):
+ return "E04"
+
+ def qfProcessInfo(self, packet):
+ return "E04"
+
+ def qGetWorkingDir(self):
+ return "2f"
+
+ def qHostInfo(self):
+ return "ptrsize:8;endian:little;"
+
+ def qQueryGDBServer(self):
+ return "E04"
+
def interrupt(self):
raise self.UnexpectedPacketException()
@@ -171,7 +198,7 @@ class MockGDBServerResponder:
def vCont(self, packet):
raise self.UnexpectedPacketException()
-
+
def readRegisters(self):
return "00000000" * self.registerCount
@@ -315,6 +342,8 @@ class MockGDBServer:
break
self._receive(data)
except Exception as e:
+ print("An exception happened when receiving the response from the gdb server. Closing the client...")
+ traceback.print_exc()
self._client.close()
break
@@ -425,7 +454,6 @@ class MockGDBServer:
class InvalidPacketException(Exception):
pass
-
class GDBRemoteTestBase(TestBase):
"""
Base class for GDB client tests.
Modified: lldb/trunk/source/Commands/CommandObjectPlatform.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectPlatform.cpp?rev=374626&r1=374625&r2=374626&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectPlatform.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectPlatform.cpp Fri Oct 11 19:08:35 2019
@@ -1264,6 +1264,10 @@ protected:
verbose = true;
break;
+ case 'x':
+ match_info.SetMatchAllUsers(true);
+ break;
+
default:
llvm_unreachable("Unimplemented option");
}
Modified: lldb/trunk/source/Commands/Options.td
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/Options.td?rev=374626&r1=374625&r2=374626&view=diff
==============================================================================
--- lldb/trunk/source/Commands/Options.td (original)
+++ lldb/trunk/source/Commands/Options.td Fri Oct 11 19:08:35 2019
@@ -591,6 +591,9 @@ let Command = "platform process list" in
def platform_process_list_show_args : Option<"show-args", "A">,
GroupRange<1, 6>,
Desc<"Show process arguments instead of the process executable basename.">;
+ def platform_process_list_all_users: Option<"all-users", "x">,
+ GroupRange<1,6>,
+ Desc<"Show processes matching all user IDs.">;
def platform_process_list_verbose : Option<"verbose", "v">, GroupRange<1, 6>,
Desc<"Enable verbose output.">;
}
Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=374626&r1=374625&r2=374626&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Fri Oct 11 19:08:35 2019
@@ -2176,8 +2176,7 @@ uint32_t GDBRemoteCommunicationClient::F
if (match_info.GetProcessInfo().EffectiveGroupIDIsValid())
packet.Printf("egid:%u;",
match_info.GetProcessInfo().GetEffectiveGroupID());
- if (match_info.GetProcessInfo().EffectiveGroupIDIsValid())
- packet.Printf("all_users:%u;", match_info.GetMatchAllUsers() ? 1 : 0);
+ packet.Printf("all_users:%u;", match_info.GetMatchAllUsers() ? 1 : 0);
if (match_info.GetProcessInfo().GetArchitecture().IsValid()) {
const ArchSpec &match_arch =
match_info.GetProcessInfo().GetArchitecture();
More information about the lldb-commits
mailing list