CaptureDumpFileOnDevice return 0 and GetLastError = ERROR_IN
本文关键字:ERROR IN GetLastError return and CaptureDumpFileOnDevice | 更新日期: 2023-09-27 18:32:50
我的.Net应用程序在Windows ce 6(在Toradex上运行)。有时它会卡住,我想创建一个转储文件。我创建了一个调用的应用程序
CaptureDumpFileOnDevice(DWORD dwProcessId, DWORD dwThreadId, LPCWSTR pwzExtraFilesPath)
但它总是返回 0
和 GetLastError
= ERROR_INVALID_PARAMETER
.即使我传递的值0
Ids
(表示当前进程和当前线程)和 null 作为路径。
我在注册表中找不到相关键(请参阅 https://msdn.microsoft.com/en-us/library/aa526063.aspx),因此我添加了"转储目录"和"DontUpload"键。
- 你有什么建议为什么我
ERROR_INVALID_PARAMETER
吗? - 是否需要在注册表中设置所有错误报告项?
- 您知道在 Windows ce 上转储的现有应用程序吗?
- 您是否有其他想法如何在不处于调试模式的情况下处理卡住的应用程序?
编辑:代码中的用法:
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice
( uint dwProcessId,
uint dwThreadId,
string pwzExtraFilesPath);
[DllImport("coredll.dll")]
private static extern uint GetLastError();
static void Main(string[] args)
{
var result = CaptureDumpFileOnDevice(0, 0, null);
if (result == 0)
{
Console.WriteLine("Error! failed to capture dump file for thread id {0} got {1}, {2}",
threadId, Marshal.GetLastWin32Error(), GetLastError());
}
}
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice( uint dwProcessId, uint dwThreadId, string pwzExtraFilesPath);
这看起来完全是错误的。尝试:
[DllImport("Coredll.dll")]
private static extern int CaptureDumpFileOnDevice( unsigned long dwProcessId, unsigned long dwThreadId, InptPtr pwzExtraFilesPath);
当你想传递字符串时,将其转换为 C 风格的 unicode 字符串
Marshal.StringToCoTaskMemUni(YourStringHere)
为了通过null
- 通过IntPtr.Zero
。