[Interest] Porting to Qt5/macx-xcode Mountain Lion

Joshua Grauman jnfo-c at grauman.com
Thu Jan 24 23:51:24 CET 2013


Sorry for all the emails, but I finally tracked it down. 
QTextCodec::codecForName("UTF-8") is returning 0 because I call it before 
QApplication is initialized. I'm not sure if this is expected behavior or 
not. In any case, on the other platforms it's not a problem.

But where there is definitely a bug in Qt is that 
QTextCodec::codecForName("UTF-8") caches the results, even when it returns 
0. So my early call of QTextCodec::codecForName("UTF-8") gets a 0 cached 
for UTF-8, which then later causes QTextStream::readLine() to crash when 
it calls QTextCodec::codecForName("UTF-8"). So looking at the Qt code, an 
extra condition should be added to make sure null pointers aren't cached 
in the QTextCodec::codecForName() function. Thanks!

Josh



> Ok, I think I've found the root problem. QTextCodec::codecByName("UTF-8")
> is returning 0. It's a static function, so I'm lost as to why this would
> be. I didn't compile my own Qt, just downloaded the main Qt5.0.0-clang SDK
> from the qt-project website and installed. This is what is causing the
> segfault in QTextStream::readLine(). Any idea what could be causing
> codecByName not to find UTF-8? Thanks!
>
> Josh
>
>> I'm not sure I did this correctly, but it did give some more information.
>> Now I can see that it is segfaulting on QTextCodec::toUnicode(), which
>> incidentally, also segfaults in another program I have. So I think I can
>> trace most (all?) my segfaults to this function. Thanks for any more help!
>>
>> Josh
>>
>> Program received signal EXC_BAD_ACCESS, Could not access memory.
>> Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
>> 0x000000010195730e in QTextCodec::toUnicode ()
>> (gdb) backtrace
>> #0  0x000000010195730e in QTextCodec::toUnicode ()
>> #1  0x0000000101a2bea7 in QTextStreamPrivate::fillReadBuffer ()
>> #2  0x0000000101a2cb1a in QTextStreamPrivate::scan ()
>> #3  0x0000000101a2e5aa in QTextStream::readLine ()
>> #4  0x0000000100005e6d in main ()
>>
>>> On quinta-feira, 24 de janeiro de 2013 19.36.02, Andreas Pakulat wrote:
>>>>> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
>>>>> 0   QtCore                              0x0000000100d6bb0b
>>>>> QTextStreamPrivate::fillReadBuffer(long long) + 299
>>>>> 1   QtCore                              0x0000000100d6c26f
>>>>> QTextStreamPrivate::scan(QChar const**, int*, int,
>>>>> QTextStreamPrivate::TokenDelimiter) + 143
>>>>> 2   QtCore                              0x0000000100d6d5dd
>>>>> QTextStream::readLine(long long) + 125
>>>>> 3   com.yourcompany.trainer             0x0000000100005e59 main + 2825
>>>>> 4   com.yourcompany.trainer             0x00000001000028d4 start + 52
>>>>
>>>> Hmm, unfortunately thats not enough, its apparently crashing within
>>>> fillReadBuffer, but the line is not available. Presumably this is
>>>> because you didn't configure Qt with -debug and hence only minimal
>>>> debug information are available. So re-configuring and rebuilding Qt
>>>> would most probably give a more helpful information.
>>>
>>> That's because it's an xcode / Mac OS X backtrace.
>>>
>>> Please give us a gdb backtrace, of the application when launched with
>>> DYLD_IMAGE_SUFFIX=_debug. That should select the debugging version of QtCore.
>>>
>>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>



More information about the Interest mailing list