
Originally Posted by
symbianyucca
Emulator would do no good really, since it is likely that it works differently. So I would suggest adding some file logging code, and running it in a real device. Then with few iterations, you should be able to point out the last line called before the panic happens. Also do remember to log any returned error codes, to see whether there are errors before the panic occurs.
In fact, like I said, that was exactly what I did: I created a logging file, a text file which produced lines of statements (typed just above whatever code in that function, i.e. MessageReceivedL()). The application always stopped writing the lines right there, at the line where CMsvStore object creation was placed. Please do me a favour, as I'm at my wit's end now.
The full code on that function is as follows.
Code:
void CSmsHandler::MessageReceivedL( TMsvId aEntryId )
{
RFs fs;
RFile file;
TFileText fileteks;
_LIT(KNamaFile, "C:\\Data\\Log.txt");
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
TInt err = file.Open(fs, KNamaFile, EFileStreamText|EFileWrite);
CleanupClosePushL(file);
if (err == KErrNotFound) err=file.Create(fs, KNamaFile, EFileStreamText|EFileWrite);
fileteks.Set(file);
fileteks.Write(_L("fileteks di-set (melalui \"file\")\r\n"));
fileteks.Write(_L("Log dimulai...\r\n"));
fileteks.Write(_L("entry = iMsvEntry->Entry();\r\n"));
entry = iMsvEntry->Entry();
fileteks.Write(_L("entry.SetNew( ETrue );\r\n"));
entry.SetNew( ETrue );
fileteks.Write(_L("entry.SetUnread( ETrue );\r\n"));
entry.SetUnread( ETrue );
fileteks.Write(_L("entry.SetVisible( ETrue );\r\n"));
entry.SetVisible( ETrue );
fileteks.Write(_L("iMsvEntry->ChangeL(entry);\r\n"));
iMsvEntry->ChangeL(entry);
fileteks.Write(_L("iSmsMtm->SwitchCurrentEntryL(aEntryId);\r\n"));
iSmsMtm->SwitchCurrentEntryL(aEntryId);
fileteks.Write(_L("iSmsMtm->LoadMessageL();\r\n"));
iSmsMtm->LoadMessageL();
fileteks.Write(_L("CSmsHeader& header = iSmsMtm->SmsHeader();\r\n"));
CSmsHeader& header = iSmsMtm->SmsHeader();
fileteks.Write(_L("TTime waktu = header.Message().Time();\r\n"));
TTime waktu = header.Message().Time();
//TBuf<30> KWaktu;
//_LIT(KFormatWaktu, "%D%M%Y%/0%1%/1%2%/2%3%/3");
_LIT(KPemisah, "<*>");
//waktu.FormatL(KWaktu, KFormatWaktu);
fileteks.Write(_L("TBuf<50> KWaktu = FormatTanggalWaktu(waktu);\r\n"));
TBuf<50> KWaktu = FormatTanggalWaktu(waktu);
fileteks.Write(_L("TPtrC from = header.FromAddress();\r\n"));
TPtrC from = header.FromAddress();
fileteks.Write(_L("const TDesC& phoneNumber = from;\r\n"));
const TDesC& phoneNumber = from;
fileteks.Write(_L("HBufC* KPesan=HBufC::NewL(KWaktu.Length());\r\n"));
HBufC* KPesan = HBufC::NewL(KWaktu.Length());
fileteks.Write(_L("CleanupStack::PushL(KPesan);\r\n"));
CleanupStack::PushL(KPesan);
fileteks.Write(_L("KPesan->Des().Copy(KWaktu);\r\n"));
KPesan->Des().Copy(KWaktu);
fileteks.Write(_L("TPtr ptr(KPesan->Des());\r\n"));
TPtr ptr(KPesan->Des());
fileteks.Write(_L("ptr.Append(KPemisah);\r\n"));
ptr.Append(KPemisah);
fileteks.Write(_L("ptr.Append(phoneNumber);\r\n"));
ptr.Append(phoneNumber);
fileteks.Write(_L("if (iSmsMtm->Entry().HasStoreL())\r\n"));
if (iSmsMtm->Entry().HasStoreL())
{
fileteks.Write(_L("Punya toko lho...\r\n"));
//fileteks.Write(_L("CMsvStore* store = iMsvEntry->ReadStoreL();\r\n"));
//CMsvStore* store = iMsvEntry->ReadStoreL();
// *** The application always stopped writing any more lines right here ***
fileteks.Write(_L("CMsvStore* store;\r\n"));
CMsvStore* store;
fileteks.Write(_L("store = iMsvEntry->ReadStoreL();"));
store = iMsvEntry->ReadStoreL();
fileteks.Write(_L("CleanupStack::PushL(store);\r\n"));
CleanupStack::PushL(store);
//TInt kesalahan;
fileteks.Write(_L("TRAPD(kesalahan, store = iMsvEntry->ReadStoreL();\r\n"));
TRAPD(kesalahan, store = iMsvEntry->ReadStoreL());
if (kesalahan != KErrNone)
{
//fileteks.Write(_L("delete store;\r\n"));
//delete store;
fileteks.Write(_L("CleanupStack::PopAndDestroy(store);\r\n"));
CleanupStack::PopAndDestroy(store);
fileteks.Write(_L("Ada kesalahan mengakses store...\r\n"));
SimpanDataSmsL(ptr);
fileteks.Write(_L("Log selesai. Ada kesalahan!"));
fileteks.Write(_L("file.Close();"));
file.Close();
CleanupStack::PopAndDestroy(&file);
fs.Close();
CleanupStack::PopAndDestroy(&fs);
CleanupStack::PopAndDestroy(store);
return;
}
/// --- The lines below are actually all commented out...
/*
if (store->HasBodyTextL())
{
fileteks.Write(_L("CRichText& richText = iSmsMtm->Body();\r\n"));
CRichText& richText = iSmsMtm->Body();
fileteks.Write(_L("store->RestoreBodyTextL(richText);\r\n"));
store->RestoreBodyTextL(richText);
fileteks.Write(_L("TInt PanjangTeks = richText.DocumentLength();\r\n"));
TInt PanjangTeks = richText.DocumentLength();
fileteks.Write(_L("RBuf KIsiSMS;\r\n"));
RBuf KIsiSMS;
fileteks.Write(_L("KIsiSMS.CleanupClosePushL();\r\n"));
KIsiSMS.CleanupClosePushL();
fileteks.Write(_L("KIsiSMS.CreateL(10));\r\n"));
KIsiSMS.CreateL(10);
fileteks.Write(_L("KIsiSMS.ReAlloc(PanjangTeks);\r\n"));
KIsiSMS.ReAlloc(PanjangTeks);
fileteks.Write(_L("richText.Extract(KIsiSMS, 0, PanjangTeks);\r\n"));
richText.Extract(KIsiSMS, 0, PanjangTeks);
richText.Reset();
fileteks.Write(_L("KPesan->ReAllocL(KWaktu.Length() + KPemisah().Length() + phoneNumber.Length() + KPemisah().Length() + PanjangTeks);\r\n"));
KPesan->ReAllocL(KWaktu.Length() + KPemisah().Length() +
phoneNumber.Length() + KPemisah().Length() + PanjangTeks);
fileteks.Write(_L("CleanupStack::Pop(KPesan);\r\n"));
CleanupStack::Pop(KPesan);
fileteks.Write(_L("CleanupStack::PushL(KPesan);\r\n"));
CleanupStack::PushL(KPesan);
fileteks.Write(_L("ptr.Append(KPemisah);\r\n"));
ptr.Append(KPemisah);
fileteks.Write(_L("ptr.Append(KIsiSMS);\r\n"));
ptr.Append(KIsiSMS);
fileteks.Write(_L("CleanupStack::PopAndDestroy(&KIsiSMS);\r\n"));
CleanupStack::PopAndDestroy(&KIsiSMS);
fileteks.Write(_L("SimpanDataSmsL(ptr);\r\n"));
SimpanDataSmsL(ptr);
//CleanupStack::PopAndDestroy(&entry);
fileteks.Write(_L("CleanupStack::PopAndDestroy(KPesan);\r\n"));
CleanupStack::PopAndDestroy(KPesan);
}
//fileteks.Write(_L("delete store;\r\n"));
//delete store;
fileteks.Write(_L("CleanupStack::PopAndDestroy(store);\r\n"));
CleanupStack::PopAndDestroy(store);
*/
///
}
else
{
fileteks.Write(_L("Kagak punya toko kok.\r\n"));
}
fileteks.Write(_L("Log selesai...\r\n"));
fileteks.Write(_L("file.Close();"));
file.Close();
CleanupStack::PopAndDestroy(&file);
fs.Close();
CleanupStack::PopAndDestroy(&fs);
}