如何识别STATUS_INVALID_CRUNTIME_PARAMETER异常

2024-02-06

平台是Windows 7 SP1。

我最近花了一些时间调试由于代码将无效参数传递给“安全”CRT 函数之一而引起的问题。结果,我的应用程序立即中止,没有任何警告或任何内容——甚至没有崩溃对话框。

起初,我尝试通过将 Windbg 附加到我的应用程序来解决这个问题。然而,当崩溃发生时,当代码闯入 Windbg 时,除了 Windbg 必须闯入的一个线程之外,几乎所有线程都已被终止。没有任何线索知道出了什么问题。因此,我将 Visual Studio 作为调试器附加,当我的应用程序终止时,我看到每个线程都以错误代码退出0xc0000417. That这给了我线索,表明某处存在无效参数问题。

接下来,我尝试调试此问题的方法是再次将 Windbg 连接到我的应用程序,但这次随机(通过试验和错误)在不同位置放置断点,例如kernel32!TerminateThread, kernel32!UnhandledExceptionFilter and kernel32!SetUnhandledExceptionFilter.

其中,将断点放置在SetUnhandledExceptionFilter崩溃发生时立即显示有问题的线程的调用堆栈以及我们错误调用的 CRT 函数。

问题:有什么直观的东西应该告诉我将 bp 放在SUEF马上?我想更好地理解这一点,而不是通过反复试验来做到这一点。第二个问题与我通过 Visual Studio 确定的错误代码有关。在不借助 VS 的情况下,如何确定 Windbg 上的线程退出代码?


我本来只是发表评论,但这变得更大,所以一个答案

使用以下命令将 Windbg 设置为事后调试器Windbg -I还将把所有未处理的异常路由到windbg

Windbg -我应该将windbg注册为事后调试器
默认情况下,AeDebug 注册表项中的 Auto 设置为 1
如果你不想调试每个程序,可以将其编辑为 0
在 wer 对话框中为您提供额外的 DoYouWanttoDebug 选项

reg query "hklm\software\microsoft\windows nt\currentversion\aedebug"

HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\aedebug
    Debugger    REG_SZ    "xxxxxxxxxx\windbg.exe" -p %ld -e %ld -g
    Auto    REG_SZ    0

假设您注册了事后调试器并运行此代码

#include <stdio.h>
#include <stdlib.h>
int main (void) 
{
    unsigned long input[] = {1,45,0xf001,0xffffffff};
    int i = 0;
    char buf[5] = {0};
    for(i=0;i<_countof(input);i++)
    {
        _ultoa_s(input[i],buf,sizeof(buf),16);
        printf("%s\n",buf);
    }
    return 1;   
}

在例外情况下,您将看到像这样的对话框

您现在可以选择调试该程序

Windows 还将未处理异常的退出代码写入事件日志

您可以使用 powershell 检索一个这样的事件

PS C:\> Get-EventLog -LogName Application -Source "Application Error" -newest 1| format-list


Index              : 577102
EntryType          : Error
InstanceId         : 1000
Message            : Faulting application name: 
ultos.exe, version: 0.0.0.0, time stamp: 0x577680f1
                     Faulting module name: ultos.exe, version: 
0.0.0.0, time stamp: 0x577680f1
                     Exception code: 0xc0000417
                     Fault offset: 0x000211c2
                     Faulting process id: 0x4a8
                     Faulting application start time: 0x01d1d3aaf61c8aaa
                     Faulting application path: E:\test\ulto\ultos.exe
                     Faulting module path: E:\test\ulto\ultos.exe
                     Report Id: 348d86fc-3f9e-11e6-ade2-005056c00008
Category           : Application Crashing Events
CategoryNumber     : 100
ReplacementStrings : {ultos.exe, 0.0.0.0, 577680f1, ultos.exe...}
Source             : Application Error
TimeGenerated      : 7/1/2016 8:42:21 PM
TimeWritten        : 7/1/2016 8:42:21 PM
UserName           :

如果你选择调试

可以查看CallStack

0:000> kPL
 # ChildEBP RetAddr  
00 001ffdc8 77cf68d4 ntdll!KiFastSystemCallRet
01 001ffdcc 75e91fdb ntdll!NtTerminateProcess+0xc
02 001ffddc 012911d3 KERNELBASE!TerminateProcess+0x2c
03 001ffdec 01291174 ultos!_invoke_watson(
            wchar_t * expression = 0x00000000 "", 
            wchar_t * function_name = 0x00000000 "", 
            wchar_t * file_name = 0x00000000 "", 
            unsigned int line_number = 0, 
            unsigned int reserved = 0)+0x31
04 001ffe10 01291181 ultos!_invalid_parameter(
            wchar_t * expression = <Value unavailable error>, 
            wchar_t * function_name = <Value unavailable error>, 
            wchar_t * file_name = <Value unavailable error>, 
            unsigned int line_number = <Value unavailable error>, 
            unsigned int reserved = <Value unavailable error>)+0x7a
05 001ffe28 0128ad96 ultos!_invalid_parameter_noinfo(void)+0xc
06 001ffe3c 0128affa ultos!common_xtox<unsigned long,char>(
            unsigned long original_value = 0xffffffff, 
            char * buffer = 0x001ffea4 "", 
            unsigned int buffer_count = 5, 
            unsigned int radix = 0x10, 
            bool is_negative = false)+0x58
07 001ffe5c 0128b496 ultos!common_xtox_s<unsigned long,char>(
            unsigned long value = 0xffffffff, 
            char * buffer = 0x001ffea4 "", 
            unsigned int buffer_count = 5, 
            unsigned int radix = 0x10, 
            bool is_negative = false)+0x59
08 001ffe78 012712b2 ultos!_ultoa_s(
            unsigned long value = 0xffffffff, 
            char * buffer = 0x001ffea4 "", 
            unsigned int buffer_count = 5, 
            int radix = 0n16)+0x18
09 001ffeac 0127151b ultos!main(void)+0x52
0a (Inline) -------- ultos!invoke_main+0x1d
0b 001ffef8 76403c45 ultos!__scrt_common_main_seh(void)+0xff
0c 001fff04 77d137f5 kernel32!BaseThreadInitThunk+0xe
0d 001fff44 77d137c8 ntdll!__RtlUserThreadStart+0x70
0e 001fff5c 00000000 ntdll!_RtlUserThreadStart+0x1b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何识别STATUS_INVALID_CRUNTIME_PARAMETER异常 的相关文章

随机推荐

  • 插入后如何在datagridview中立即刷新或显示?

    在所有文本框中输入数据并单击提交按钮后 它不会立即显示在 datagridview 中 我需要重新打开表单才能看到新插入的行 刷新时要输入什么代码 遵循 user3222297代码 通过添加 grdPatient Update 和 grdP
  • 超时 Get-WMIObject cmdlet

    我运行一个执行许多 WMI 查询的脚本 但如果服务器不应答 cmdlet 就会挂起 有什么方法可以让这个 或任何其他cmdlet 超时并在X秒过去后退出 Edit 感谢 mjolinor 的提示 解决方案是将其作为 asjob 运行并在 w
  • Git stash apply 没有返回工作目录?

    我提交了一些文件并将其推送到远程 然后发现自己有问题 想恢复推送进行一些编辑 我隐藏 恢复并想要重新应用隐藏 但应用后 我的工作目录仍然缺少文件 请帮忙 这是历史 git commit m Model package dev ec5e61d
  • 无法在 Eclipse 中的 JavaFX 项目中创建 FXML 文件

    操作系统 Ubuntu 14 04 IDE Eclipse Mars 1 版本 4 5 1 和场景构建器 2 I can t choose root element because as I understand it should be
  • 适用于 iOS 项目的 XCode 8 中的 CMake 和代码签名

    CMake 能够使用目标属性设置为 XCode set target properties app PROPERTIES XCODE ATTRIBUTE CODE SIGN IDENTITY PROPER IDENTIFIER XCode
  • 省略代码:条件属性和预处理指令之间有什么区别吗?

    我想知道两者之间有什么区别 define MYSYMBOL if MYSYMBOL public void foo endif and define MYSYMBOL Conditional MYSYMBOL public void foo
  • django安装问题[python]

    去年夏天我想学习 Web 开发 所以我安装了 Django 1 8 一个不稳定的版本 我是在没有pip的情况下安装的 我最近决定再试一次 但想使用稳定版本 1 7 1 并且为了简单起见想使用 pip 安装 我读到为了删除没有 pip 安装的
  • 计算机代数软件,用于最小化一组多项式中的运算次数

    我有多项式系统 相当简单的多项式表达式 但相当长 优化我的手牌 表达式按集合分组 在给定的集合中 多个变量中有共同的术语 我想知道是否有一个计算机代数系统 例如 Mathematica Matlab 或 sympy 可以优化多个具有常用项的
  • 如何在 centos 7 上链接 python3 以使用 openssl11/或最新版本的 openssl (1.1.1)

    我们想在centos 7中升级OpenSSL但没有成功 原因可能是这样的 通过 yum install openssl11 将 CentOS 7 升级到 OpenSSL 1 1 1 https stackoverflow com quest
  • Memcached 块限制

    为什么有硬编码的块限制 压缩后 0 5 兆 内存缓存 http memcached org 有人重新编译过它吗 我知道我不应该发送这样的大块 但这些额外的重块时不时地发生在我身上并造成严重破坏 这个问题曾经在官方常见问题解答 http co
  • AWS ALB 中基于路径的路由到具有多个端口的单个主机

    我想创建一个 ALB 它应该根据到不同网站的路径路由我的流量 例如 example com apple 应该转到 8080 example com grapes 应该转到 8180 example com oranges 应转到 8280
  • Rails 4 simple_form has_many 通过复选框不保存

    我正在尝试使用 simple form 通过复选框来实现员工经常性扣除表 我的代码有效 但所选的经常性扣除未保存在我的表中 我不明白为什么 这是我的模型 class Employee lt ActiveRecord Base belongs
  • 使用 maven-nar-plugin 在 Maven 中构建 C++ 项目

    有人使用 maven nar plugin 为不同平台 使用不同编译器构建 C 代码吗 如果有人请给我更多有关此的信息 我只是想知道如何使用 Maven 为不同平台构建 NAR 文件 我知道 为了能够在特定平台上构建项目 您应该在该平台上运
  • 在 Azure Functions 项目(.NET 标准 2.0)本地中找不到工作职能

    我正在尝试在 NET 标准 2 0 中创建一个 Azure Functions 项目 因为我需要在该项目中使用 NET 标准 2 0 类库 但是 当我尝试创建一个简单的 Azure Functions 项目并在本地运行它时 出现以下错误 h
  • em 中的媒体查询不受基本字体大小的影响

    我试图理解为什么设置不同的基本字体大小不会影响媒体查询的 EM 值 它们的默认基本字体大小为 16px 而其余内容反应正常 自己尝试一下 PX 中的媒体查询 https jsfiddle net sebtp n8x0tuvq 5 https
  • 输出导致与正则表达式不匹配的第一个字符

    是否可以输出导致与正则表达式不匹配的字符串 其索引 中的第一个字符 是否可以仅使用正则表达式匹配操作 或者必须使用更复杂的操作 例如 在 JavaScript 中 我可能有一个正则表达式 d 3 s d 2 匹配包含 3 位数字后跟空格和另
  • Android 中使用 xml 自定义形状

    我正在尝试绘制一个自定义形状 可以将其用作布局的背景 但我不能这样做 是否可以使用 android xml 中的 xml 绘制如下形状 我不知道如何从矩形的垂直中心切割半圆形 Use layer list制作这个自定义形状drawable
  • 无序对集合,编译错误

    我正在尝试创建一组无序的对 到目前为止我有 typedef std pair
  • 如何为子域配置 Facebook 应用程序

    我正在构建一个多租户应用程序 并且我挣扎将 Facebook 登录合并到 Web 应用程序中 例如 租户正在使用子域 http tenant 1 domain com http tenant 2 domain com http tenant
  • 如何识别STATUS_INVALID_CRUNTIME_PARAMETER异常

    平台是Windows 7 SP1 我最近花了一些时间调试由于代码将无效参数传递给 安全 CRT 函数之一而引起的问题 结果 我的应用程序立即中止 没有任何警告或任何内容 甚至没有崩溃对话框 起初 我尝试通过将 Windbg 附加到我的应用程