Java 问题,目前遇到了一个比较奇怪的问题:
想找到一种方式查看到当前 jvm ( windows 平台)的 C++的方法调用栈的情况呢? 具体是那个位置造成了死循环(目前看 jdk 层 java 代码未产生死循环)。
方法名是 WindowsNativeDispatcher.CreateFile0 ,通过 JDK 源码,找到了 natvie 方法的 c 文件
下面是具体代码:
JNIEXPORT jlong JNICALL
Java_sun_nio_fs_WindowsNativeDispatcher_CreateFile0(JNIEnv* env, jclass this,
jlong address, jint dwDesiredAccess, jint dwShareMode, jlong sdAddress,
jint dwCreationDisposition, jint dwFlagsAndAttributes)
{
HANDLE handle;
LPCWSTR lpFileName = jlong_to_ptr(address);
SECURITY_ATTRIBUTES securityAttributes;
LPSECURITY_ATTRIBUTES lpSecurityAttributes;
PSECURITY_DESCRIPTOR lpSecurityDescriptor = jlong_to_ptr(sdAddress);
if (lpSecurityDescriptor == NULL) {
lpSecurityAttributes = NULL;
} else {
securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
securityAttributes.lpSecurityDescriptor = lpSecurityDescriptor;
securityAttributes.bInheritHandle = FALSE;
lpSecurityAttributes = &securityAttributes;
}
handle = CreateFileW(lpFileName,
(DWORD)dwDesiredAccess,
(DWORD)dwShareMode,
lpSecurityAttributes,
(DWORD)dwCreationDisposition,
(DWORD)dwFlagsAndAttributes,
NULL);
if (handle == INVALID_HANDLE_VALUE) {
throwWindowsException(env, GetLastError());
}
return ptr_to_jlong(handle);
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.