小编Jor*_*Dox的帖子

如何调试"传递给C运行时函数的无效参数"?

背景

我有大约1TB的原始数据文件,标记数据的子集相对较小.我编写了c ++代码(调用了一些古老的MSVC++ 2003代码,我对其进行了大量修改以使其在最近的编译器上进行编译)来聚合带注释的数据切片.

标记数据的很大一部分集中在一个文件中,但该文件最终成为程序崩溃的文件.

问题

我越来越

Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
terminate called after throwing an instance of 'int'
Run Code Online (Sandbox Code Playgroud)

在我的Qt输出窗口中,Windows在弹出窗口中告诉我相同的内容,但此时从可执行文件/调试器中获取任何有用的信息为时已晚(尽管我对Qt的调试器没有任何经验).

我试过了什么

我已经google了一遍,发现很多人都有这个错误消息,但它是如此通用,以至于他们的问题都没有和我的一样,并且有很长的不同C运行时函数列表,筛选所有这些函数很慢它似乎没有帮助.

我的问题

"找一个男人一个虫子,你帮助他一天.教一个男人调试,你帮助他一辈子.在stackoverflow上发布你的方式,你可以帮助很多男人并得到很多赞成."

是否有一个通用的方法来查找问题的C运行时函数以及参数是什么?我错过了一些花哨的调试器功能吗?还有什么可以推荐或我可以提供的信息吗?

我希望得到一个全能的答案,以帮助每个人解决这个问题,而不仅仅是我,但如果我当然得到帮助,我会很高兴.

具体到我的问题:

我的堆栈跟踪如下:

0 ntdll!DbgBreakPoint 0x7727000d
1 ntdll!DbgUiRemoteBreakin 0x772ff156
2 ?? 0x6f06eaa1
3 KERNEL32!BaseThreadInitThunk 0x7501338a
4 ntdll!RtlInitializeExceptionChain 0x77299902
5 ntdll!RtlInitializeExceptionChain 0x772998d5
6 ??

并且gdb似乎无法获得更好的跟踪(我尝试用它做的任何事都会给我一个超时错误).

在尝试了几个函数之后,为了确保一切都超时,尝试"回溯"再一次给了我一个结果.我想我曾经把时间浪费在我身上,从来没有把这么多时间花在gdb上.

也就是说,我可能能够找到这个新信息的东西.考虑我的具体问题已经关闭,但我的一般观点仍然有效我相信:我现在已经找到了问题的函数(我认为),但不是为什么它是一个问题,也不是无效参数是什么.更好的是,我已经将它追溯到一条线,上面写着"扔1".所以现在我假设windows/Qt将其转换为"无效参数".但事实并非如此.

它可能只是一些不好的代码,它甚至不需要是一个C函数,并且您的参数不需要出错.

...

#17 0x00c17d72在libstdc ++中 - 6!.cxa_throw()来自C:\ Qt\5.5\mingw492_32\bin\libstdc ++ - 6.dll没有可用的符号表信息....

c++ debugging

19
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×1

debugging ×1