-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8263670: pmap and pstack in jhsdb do not work on debug server #3027
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
/* | ||
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. | ||
* Copyright (c) 2021 NTT DATA. | ||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
* | ||
* This code is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
import jdk.test.lib.JDKToolLauncher; | ||
import jdk.test.lib.apps.LingeredApp; | ||
import jdk.test.lib.process.OutputAnalyzer; | ||
import jdk.test.lib.SA.SATestUtils; | ||
|
||
import jtreg.SkippedException; | ||
|
||
/** | ||
* @test | ||
* @bug 8263670 | ||
* @requires vm.hasSA | ||
* @requires os.family != "windows" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You exclude windows but you check for ".dll" below. |
||
* @library /test/lib | ||
* @run main/othervm PmapOnDebugdTest | ||
*/ | ||
|
||
public class PmapOnDebugdTest { | ||
|
||
public static void main(String[] args) throws Exception { | ||
SATestUtils.skipIfCannotAttach(); // throws SkippedException if attach not expected to work. | ||
|
||
if (SATestUtils.needsPrivileges()) { | ||
// This tests has issues if you try adding privileges on OSX. The debugd process cannot | ||
// be killed if you do this (because it is a root process and the test is not), so the destroy() | ||
// call fails to do anything, and then waitFor() will time out. If you try to manually kill it with | ||
// a "sudo kill" command, that seems to work, but then leaves the LingeredApp it was | ||
// attached to in a stuck state for some unknown reason, causing the stopApp() call | ||
// to timeout. For that reason we don't run this test when privileges are needed. Note | ||
// it does appear to run fine as root, so we still allow it to run on OSX when privileges | ||
// are not required. | ||
throw new SkippedException("Cannot run this test on OSX if adding privileges is required."); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. pmap and pstack are not even supported on OSX with a live process. The automated github testing did not catch this because it passed due to the above check: TEST RESULT: Passed. Skipped: jtreg.SkippedException: Cannot run this test on OSX if adding privileges is required. If it passed the check, it would have failed below to find a .dylib. You could change the code below to something like what is in ClhsdbPmap.java:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also, this code and the giant comment block will now be in 3 places. Maybe it should be moved to SATestUtils. Maybe something like |
||
|
||
LingeredApp theApp = null; | ||
DebugdUtils debugd = null; | ||
try { | ||
theApp = LingeredApp.startApp(); | ||
System.out.println("Started LingeredApp with pid " + theApp.getPid()); | ||
debugd = new DebugdUtils(null); | ||
debugd.attach(theApp.getPid()); | ||
|
||
JDKToolLauncher jhsdbLauncher = JDKToolLauncher.createUsingTestJDK("jhsdb"); | ||
jhsdbLauncher.addToolArg("jmap"); | ||
jhsdbLauncher.addToolArg("--connect"); | ||
jhsdbLauncher.addToolArg("localhost"); | ||
|
||
Process jhsdb = (SATestUtils.createProcessBuilder(jhsdbLauncher)).start(); | ||
OutputAnalyzer out = new OutputAnalyzer(jhsdb); | ||
|
||
jhsdb.waitFor(); | ||
System.out.println(out.getStdout()); | ||
System.err.println(out.getStderr()); | ||
|
||
out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); | ||
out.shouldMatch("^0x[0-9a-f]+.+jvm\\.(dll|dylib|so)$"); // Find libjvm from output | ||
out.shouldHaveExitValue(0); | ||
|
||
// This will detect most SA failures, including during the attach. | ||
out.shouldNotMatch("^sun.jvm.hotspot.debugger.DebuggerException:.*$"); | ||
} catch (SkippedException se) { | ||
throw se; | ||
} catch (Exception ex) { | ||
throw new RuntimeException("Test ERROR " + ex, ex); | ||
} finally { | ||
if (debugd != null) { | ||
debugd.detach(); | ||
} | ||
LingeredApp.stopApp(theApp); | ||
} | ||
System.out.println("Test PASSED"); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: Indent is incorrect now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! I fixed it in new commit.