I have a small test program that consistently crashes. I can't tell if the crash is due to Wx or Perl, but I can trigger it on and off by how I use a recent Perl feature.
Here is the program (it is also attached as "test.pl"):
#!perl
use Wx;
package MyApp;
use base 'Wx::App';
use MyList;
sub OnInit
{
my $self = shift;
my $frame = Wx::Frame->new(undef, -1, 'title');
my $panel = Wx::Panel->new($frame);
MyList->new(parent => $panel, pos => [10, 30], size => [500, 200]);
$frame->Show(1);
return 1;
}
# ---------------------------------
# Create the application object, and pass control to it.
package main;
my $app = MyApp->new;
$app->MainLoop;
"MyList" is a control derived from Wx::ListCtrl. Here is its code (also
attached as "MyList.pm"):
package MyList;
use Modern::Perl;
use Wx qw(:listctrl);
use base 'Wx::ListCtrl';
use Hash::Util::FieldHash;
Hash::Util::FieldHash::fieldhash # This is line 7
my %some_attribute;
sub new
{
my $class = shift;
my %parm = @_;
my $pos = $parm{pos} || [-1, 1];
my $size = $parm{size} || [-1, 1];
# Construct list control object
my $self = $class->SUPER::new($parm{parent}, -1, $pos, $size,
wxLC_REPORT | wxLC_HRULES | wxLC_VRULES,
);
# Init member data
$some_attribute{$self} = 'sad';
# Initialize column
$self->InsertColumn(0, 'Zero');
return $self;
}
1;
This is a pretty straightforward, inside-out object. It doesn't do
anything but call Wx::ListCtrl's constructor with some fixed style
parameters, and inserts a column titled "Zero". It stores the value "sad"
in a member attribute that is a Fieldhash.
This program crashes consistently every time I run it. My system is
Windows 7 Professional 64-bit, 4gb RAM, dual-monitor, with Strawberry Perl
5.12.1 (MSWin32-x86-multi-thread), with Wx.pm version 0.98, and wxWidgets
2.8.10. The Windows Error Report is attached as "WEReport.txt".
Now the interesting part: Comment out line 7 (turning %some_attribute
from a field hash into a regular old hash), and the program no longer
crashes. I don't know if Hash::Util::FieldHash is doing something bad, or
if it's doing something that confuses Wx, or if Wx is doing something bad.
--
Eric J. Roode
Version=1 EventType=APPCRASH EventTime=129357098989130429 ReportType=2 Consent=1 UploadTime=129357098990380554 ReportIdentifier=dc11330d-fd8b-11df-9364-0019bb422745 IntegratorReportIdentifier=dc11330c-fd8b-11df-9364-0019bb422745 WOW64=1 Response.type=4 Sig[0].Name=Application Name Sig[0].Value=perl.exe Sig[1].Name=Application Version Sig[1].Value=0.0.0.0 Sig[2].Name=Application Timestamp Sig[2].Value=4c520505 Sig[3].Name=Fault Module Name Sig[3].Value=wxmsw28u_core_gcc_custom.dll Sig[4].Name=Fault Module Version Sig[4].Value=2.8.10.0 Sig[5].Name=Fault Module Timestamp Sig[5].Value=4cf572b2 Sig[6].Name=Exception Code Sig[6].Value=c0000005 Sig[7].Name=Exception Offset Sig[7].Value=00084a5b DynamicSig[1].Name=OS Version DynamicSig[1].Value=6.1.7600.2.0.0.256.48 DynamicSig[2].Name=Locale ID DynamicSig[2].Value=1033 DynamicSig[22].Name=Additional Information 1 DynamicSig[22].Value=0a9e DynamicSig[23].Name=Additional Information 2 DynamicSig[23].Value=0a9e372d3b4ad19135b953a78882e789 DynamicSig[24].Name=Additional Information 3 DynamicSig[24].Value=0a9e DynamicSig[25].Name=Additional Information 4 DynamicSig[25].Value=0a9e372d3b4ad19135b953a78882e789 UI[2]=C:\strawberry\perl\bin\perl.exe UI[3]=perl.exe has stopped working UI[4]=Windows can check online for a solution to the problem. UI[5]=Check online for a solution and close the program UI[6]=Check online for a solution later and close the program UI[7]=Close the program LoadedModule[0]=C:\strawberry\perl\bin\perl.exe LoadedModule[1]=C:\Windows\SysWOW64\ntdll.dll LoadedModule[2]=C:\Windows\syswow64\kernel32.dll LoadedModule[3]=C:\Windows\syswow64\KERNELBASE.dll LoadedModule[4]=C:\strawberry\perl\bin\perl512.dll LoadedModule[5]=C:\Windows\syswow64\ADVAPI32.DLL LoadedModule[6]=C:\Windows\syswow64\msvcrt.dll LoadedModule[7]=C:\Windows\SysWOW64\sechost.dll LoadedModule[8]=C:\Windows\syswow64\RPCRT4.dll LoadedModule[9]=C:\Windows\syswow64\SspiCli.dll LoadedModule[10]=C:\Windows\syswow64\CRYPTBASE.dll LoadedModule[11]=C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16661_none_420fe3fa2b8113bd\COMCTL32.DLL LoadedModule[12]=C:\Windows\syswow64\GDI32.dll LoadedModule[13]=C:\Windows\syswow64\USER32.dll LoadedModule[14]=C:\Windows\syswow64\LPK.dll LoadedModule[15]=C:\Windows\syswow64\USP10.dll LoadedModule[16]=C:\Windows\syswow64\SHLWAPI.dll LoadedModule[17]=C:\Windows\syswow64\WS2_32.DLL LoadedModule[18]=C:\Windows\syswow64\NSI.dll LoadedModule[19]=C:\strawberry\perl\bin\libgcc_s_sjlj-1.dll LoadedModule[20]=C:\Windows\system32\IMM32.DLL LoadedModule[21]=C:\Windows\syswow64\MSCTF.dll LoadedModule[22]=C:\strawberry\perl\lib\auto\attributes\attributes.dll LoadedModule[23]=C:\strawberry\perl\site\lib\auto\Wx\Wx.dll LoadedModule[24]=C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_2_8_10_uni_gcc_3_4\lib\wxbase28u_gcc_custom.dll LoadedModule[25]=C:\Windows\syswow64\OLE32.dll LoadedModule[26]=C:\Windows\syswow64\SHELL32.DLL LoadedModule[27]=C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_2_8_10_uni_gcc_3_4\lib\wxmsw28u_adv_gcc_custom.dll LoadedModule[28]=C:\strawberry\perl\site\lib\Alien\wxWidgets\msw_2_8_10_uni_gcc_3_4\lib\wxmsw28u_core_gcc_custom.dll LoadedModule[29]=C:\Windows\syswow64\COMDLG32.DLL LoadedModule[30]=C:\Windows\syswow64\OLEAUT32.DLL LoadedModule[31]=C:\Windows\system32\WINMM.DLL LoadedModule[32]=C:\Windows\system32\uxtheme.dll LoadedModule[33]=C:\strawberry\perl\lib\auto\mro\mro.dll LoadedModule[34]=C:\strawberry\perl\lib\auto\List\Util\Util.dll LoadedModule[35]=C:\strawberry\perl\lib\auto\Hash\Util\FieldHash\FieldHash.dll LoadedModule[36]=C:\Windows\system32\dwmapi.dll FriendlyEventName=Stopped working ConsentKey=APPCRASH AppName=perl.exe AppPath=C:\strawberry\perl\bin\perl.exe
test.pl
Description: Binary data
MyList.pm
Description: Binary data
