我正在调试的程序是一个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.dll
和tk86.dll
(都不会创建越界访问:我们确实非常仔细地检查了这类事情(并且有开发人员构建模式,至少在它们的实现中会显示任何此类问题(。然而,如果其他代码写在它不应该写的地方(其中有很多代码我根本无法保证(,那么所有的赌注都会被取消,因为代码正确性的先决条件不再成立。
tl;dr您有内存损坏问题。这太糟糕了。
尝试使用electricfence或purify等内存访问跟踪工具静态构建应用程序(可能还有其他工具,这不是一个详尽的列表(;这样做对性能的影响是深远的,但它发现错误本身的几率相当高。