c语言 - 使用 R 应用程序附件调试.dll产生"Illegal Instruction"错误



我正在调试的程序是一个R GUI应用程序,它利用几个C.dll文件来执行任务。我正在使用Visual Studio 2019作为我的调试器。

错误:Unhandled exception at 0x00000000279BB8CC (tcl86.dll) in rsession.exe: 0xC000001D: Illegal Instruction.

我不知道如何更深入地了解tcl86.dll为什么会这样。

这是我第一次调试程序,它恰好是一个相当复杂的程序,所以我不知道如何解释我得到的输出。我会尽可能多地分享,如果我需要发布更多信息,请告诉我。

这是调用堆栈:

tcl86.dll!00000000279bb8cc()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!000000002797f8b5()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!000000002797f9d2()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!0000000027999606()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!0000000027999c2b()    Unknown Non-user code. Binary was not built with debug information.
>   tkogl2.dll!del(void * clientData, Tcl_Interp * interp, int objc, Tcl_Obj * const * objv) Line 1148  C   Symbols loaded.
tcl86.dll!00000000278a7a07()    Unknown Non-user code. Binary was not built with debug information.
tcltk.dll!000000006c302378()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7a6542()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f3249()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fa2()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c80268c()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c802f2a()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f6733()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c7f8bdf()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fe1()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c803a98()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c804b1f()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c801fa2()    Unknown Non-user code. Binary was not built with debug information.
tcltk.dll!000000006c301aae()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!00000000278a2492()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!00000000278a7a07()    Unknown Non-user code. Binary was not built with debug information.
tcl86.dll!00000000278aa454()    Unknown Non-user code. Binary was not built with debug information.
tk86.dll!0000000062982874() Unknown Non-user code. Binary was not built with debug information.
tk86.dll!00000000629170bf() Unknown Non-user code. Binary was not built with debug information.
tk86.dll!000000006292111f() Unknown Non-user code. Binary was not built with debug information.
user32.dll!00007ffea7315b6d()   Unknown Non-user code. Cannot find or open the PDB file.
user32.dll!00007ffea7315562()   Unknown Non-user code. Cannot find or open the PDB file.
Rgraphapp.dll!000000006355751b()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c721365()    Unknown Non-user code. Binary was not built with debug information.
rsession.exe!000000000085b0e9() Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c796727()    Unknown Non-user code. Binary was not built with debug information.
rsession.exe!000000000085d670() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!000000000044de43() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!00000000004194b7() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!0000000000894845() Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c829772()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c829a01()    Unknown Non-user code. Binary was not built with debug information.
R.dll!000000006c829a92()    Unknown Non-user code. Binary was not built with debug information.
rsession.exe!00000000008a9801() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!00000000008915cf() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!0000000000bedf98() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!00000000004013e8() Unknown Non-user code. Binary was not built with debug information.
rsession.exe!000000000040151b() Unknown Non-user code. Binary was not built with debug information.
kernel32.dll!00007ffea5b47bd4() Unknown Non-user code. Cannot find or open the PDB file.
ntdll.dll!00007ffea754ced1()    Unknown Non-user code. Cannot find or open the PDB file.

以下是调试器中的输出:alloc: invalid block: 000000002BF31390: 0 2bException thrown at 0x00000000279BB8CC (tcl86.dll) in rsession.exe: 0xC000001D: Illegal Instruction. Unhandled exception at 0x00000000279BB8CC (tcl86.dll) in rsession.exe: 0xC000001D: Illegal Instruction.

以下是调试器在C代码中停止的代码:

else if (strcmp(shape, "specimens") == 0)
{
specimen_del(0);
if (models != NULL)
{
Tcl_Free((char*)models);
models = NULL; //error symbol here
}
if (context != NULL)
{
Tcl_Free((char*)context);
context = NULL;
}
}

这篇文章的目的是了解如何解释调试器给我的错误和信息,以及我可能能够探索的潜在解决方案。非常感谢。

该消息的第一部分alloc: invalid block: 000000002BF31390: 0 2b是来自Tcl库的消息。该消息的含义是内存已被越界的内存写入损坏。该消息的生成位置在Tcl的线程感知内存分配器中,但不是错误所在的位置:它只是检测到问题的地方一旦内存被破坏,所有关于程序未来行为的赌注都将落空;死于非法指令错误是完全可能的(这可能是由于损坏的堆栈(。

如果内存没有损坏,Tcl和Tk DLL(特别是堆栈跟踪中的tcl86.dlltk86.dll(都不会创建越界访问:我们确实非常仔细地检查了这类事情(并且有开发人员构建模式,至少在它们的实现中会显示任何此类问题(。然而,如果其他代码写在它不应该写的地方(其中有很多代码我根本无法保证(,那么所有的赌注都会被取消,因为代码正确性的先决条件不再成立。

tl;dr您有内存损坏问题。这太糟糕了。

尝试使用electricfence或purify等内存访问跟踪工具静态构建应用程序(可能还有其他工具,这不是一个详尽的列表(;这样做对性能的影响是深远的,但它发现错误本身的几率相当高。

相关内容

最新更新