Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CaptureDumpFileOnDevice返回0和GetLastError=错误\u无效\u参数(87)_C#_Windows_Dump - Fatal编程技术网

C# CaptureDumpFileOnDevice返回0和GetLastError=错误\u无效\u参数(87)

C# CaptureDumpFileOnDevice返回0和GetLastError=错误\u无效\u参数(87),c#,windows,dump,C#,Windows,Dump,我的.Net应用程序在windows ce 6(在Toradex上)上运行。 有时它会卡住,我想创建一个转储文件。 我已经创建了一个调用 CaptureDumpFileOnDevice(DWORD dwProcessId, DWORD dwThreadId, LPCWSTR pwzExtraFilesPath) 但是它总是返回0和GetLastError=ERROR\u无效的\u参数。即使我为Ids(表示当前进程和当前线程)传递值0,为路径传递值null 我在注册表中找不到相关的键(请参阅),

我的.Net应用程序在windows ce 6(在Toradex上)上运行。 有时它会卡住,我想创建一个转储文件。 我已经创建了一个调用

CaptureDumpFileOnDevice(DWORD dwProcessId, DWORD dwThreadId, LPCWSTR pwzExtraFilesPath)
但是它总是返回
0
GetLastError
=
ERROR\u无效的\u参数
。即使我为
Ids
(表示当前进程和当前线程)传递值
0
,为路径传递值null

我在注册表中找不到相关的键(请参阅),因此我添加了'DumpDirectory'和'DontUpload'键

  • 你有什么建议为什么我会得到
    错误\u无效\u参数
  • 是否需要设置注册表中的所有错误报告项
  • 您知道在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());
        } 
    }
    
    这看起来完全错了。 尝试:

    当您想要传递字符串时,请使用

    Marshal.StringToCoTaskMemUni(YourStringHere)
    
    要通过
    null
    ,请改为通过
    IntPtr.Zero

    这看起来完全错了。 尝试:

    当您想要传递字符串时,请使用

    Marshal.StringToCoTaskMemUni(YourStringHere)
    

    为了传递
    null
    ,请传递
    IntPtr.Zero

    显示如何调用此函数。var result=CaptureDumpFileOnDevice(0,0,null);如果(result==0){Console.WriteLine(“Error!未能捕获线程id{0}的转储文件,{1},{2}”,threadId,Marshal.GetLastWin32Error(),GetLastError());}那么
    CaptureDumpFileOnDevice
    在应用程序中究竟是如何定义的,这是一个C++函数,你有任何P/INVIKE签名吗?我也尝试过使用特定的进程ID和它的线程ID,但是我得到了同样的结果[DLimPurt(“CordEr.dll”)]私有静态外置int捕获DimpFielon设备(Uint DeProcess,Uint DWStuaSID,字符串pWZTopFaFielSpess);[DllImport(“coredll.dll”)]私有静态外部uint GetLastError();显示为如何调用此函数。var result=CaptureDumpFileOnDevice(0,0,null);如果(result==0){Console.WriteLine(“Error!未能捕获线程id{0}的转储文件,{1},{2}”,threadId,Marshal.GetLastWin32Error(),GetLastError());}那么
    CaptureDumpFileOnDevice
    在应用程序中究竟是如何定义的,这是一个C++函数,你有任何P/INVIKE签名吗?我也尝试过使用特定的进程ID和它的线程ID,但是我得到了同样的结果[DLimPurt(“CordEr.dll”)]私有静态外置int捕获DimpFielon设备(Uint DeProcess,Uint DWStuaSID,字符串pWZTopFaFielSpess);[DllImport(“coredll.dll”)]私有静态外部uint GetLastError();试过了。还是一样的结果:(试过了。还是一样的结果:(
    Marshal.StringToCoTaskMemUni(YourStringHere)