291 Commits

Author SHA1 Message Date
Thiago Macieira
02fd6ca5e7 QLogging: deduplicate calling of isFatal()/qt_message_fatal()
Just roll everything up into qt_message().

Change-Id: I2b24e1d3cad44897906efffd177fb9867131b795
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
(cherry picked from commit 88e9ce201b9599db7470c7879e0bf29262501a42)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-09-10 03:37:25 +00:00
David Faure
03ee1e1002 Fix assert in qCleanupFuncInfo when using QDebug from a lambda with auto
ASSERT: "size_t(i) < size_t(size())" in file qbytearray.h, line 492
due to info being emptied out completely and then the code does
while ((info.at(0) == '*')

info was empty because the recent fix "that wasn't the function argument
list" would exit the loop with pos at end.

Incidentally, this change fixes the fact that qCleanupFuncInfo was
removing lambdas:
  main(int, char**)::<lambda()>
became
  main(int, char**)::
which was, well, shorted, but weird.

Change-Id: Ic7e8f21ea0df7ef96a3f25c4136a727dc0def207
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 056bdef045867dad07066351787b2edb771be569)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-07-11 00:38:10 +00:00
Kai Köhne
9361271f11 Doc: Improve description of QT_FATAL_ environment vars
Much like QT_FATAL_WARNINGS, QT_FATAL_CRITICALS also is
interpreted as a counter. Revamp both function descriptions
to make scope and purpose clearer.

Also, mention logging rules as a way to surpress output,
in addition to a custom message hander.

Change-Id: I44767abb067a6accd81f13dc549c9787ef9a4729
Reviewed-by: Andreas Eliasson <andreas.eliasson@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 62e3fa28d7610b5b1b5b5b9c3f67423549a3aec6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-07-06 09:45:55 +00:00
Marc Mutz
0188af38b1 QLogging: add qYieldCpu() to CAS loop
CAS failures should result in PAUSE/YIELD, cf. qYieldCpu() docs.

qYieldCpu() is only available since Qt 6.3, though, so adding it as a
follow-up with limited pick-to.

Task-number: QTBUG-115062
Change-Id: Ibcc73881875a47935940015e30b9a27a282054d4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 06d520dbef21f5debe9f092c63d2aa9b02afb4c3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-07-06 09:45:55 +00:00
Marc Mutz
c9fe146401 Make sure we don't count down past 0 QT_FATAL_CRITICALS
The old code first checked for == 0, then, if false, executed a
fetchAndAdd(-1), both with relaxed memory ordering. This can lead to
executions that, counter to what the code comment states, can count
down past 0:

    // T1                   T2
    loadRelaxed()                                  // true
                            loadRelaxed()          // true
    fetchAndAddRelaxed(-1)                         // e.g. 1 → 0
                            fetchAndAddRelaxed(-1) // 0 → -1

while fatality is detected exactly once, this execution doesn't stop
at 0 and causes further calls to isFatal() to count down further, with
the (very) remote spectre of underflow past INT_MIN.

Fix by using a CAS loop instead, so each count-down uses only one
step, not two, which therefore can no longer interleave.

Fixes: QTBUG-115062
Change-Id: If77b906c94cb4b9fa91bfad84fe63bc8d9103b0a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit b933a5668cc5647d26378f8a9a52901d0497585d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-07-06 09:45:55 +00:00
Marc Mutz
4ea9f75b11 QLogging: DRY isFatal(QtMsgType)
Extract Method on the count-down algorithm of fatalCriticals and
fatalWarnings, so we don't have the repeat the calculation and the
comment.

Task-number: QTBUG-115062
Change-Id: I4bcbc2f5a21b999e7f301085581677b437a889e9
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
(cherry picked from commit 3ffc1f9775cde1369ebdfcfa91ec18c393c24260)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2023-07-05 11:03:56 +00:00
Giuseppe D'Angelo
2794742fac QLogging: fix indentation
Just a whitespace change.

Change-Id: Ib54cb2f8c49c0cece3ff9b85f290c0c21eb85487
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-26 11:10:06 +02:00
Peter Varga
2550568a92 Enable [[noreturn]] attribute for non-MSVC compilers on Windows
Avoids -Wsometimes-uninitialized warnings with clang-cl.

Also do not allow to return qt_message_fatal() if built with other
compiler than MSVC.

Amends 97b32fa0b661c5dd89d525122427496132abb54a

Fixes: QTBUG-113351
Change-Id: I9ce87057e764af1e25de93388ae983891df66d2e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-12 15:33:52 +02:00
Ahmad Samir
7191b8fe38 Fix some narrowing conversion warnings
ioctl call for FIONREAD takes an int arg, it won't work correctly
otherwise. Cast the return of the read() call to int, because it won't
read more than buffSize (which is an int).

Change-Id: I130202a732684257bbb0e79c9358b60a61010c46
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-04-08 13:24:04 +02:00
Thiago Macieira
644c06b48f Logging: fix crash when decoding a symbol that isn't a function
Saw this on my FreeBSD VM. The backtrace() function thought the nearest
symbol to something was "_ZTSNSt3__110__function6__baseIFbPvS2_EEE",
which decoded to

 typeinfo name for std::__1::__function::__base<bool (void*, void*)>

The function pointer type inside parameter threw the decoder for a loop
and caused it to crash with the failed assertion in qbytearray.h:

 inline char QByteArray::at(qsizetype i) const
 { Q_ASSERT(size_t(i) < size_t(size())); return d.data()[i]; }

I noticed this
 - because tst_qtimer hung
 - because qFormatLogMessage deadlocked acquiring QMessagePattern::mutex
 - because the logging recursed
 - because qCleanupFuncinfo failed an assertion while formatting the
   backtrace (my QT_MESSAGE_PATTERN has %{backtrace})
 - because QTimer::~QTimer -> QObject::killTimer printed a warning
 - because tst_QTimer::moveToThread produces warnings

Pick-to: 5.15 6.2 6.4 6.5
Change-Id: Ieec322d73c1e40ad95c8fffd17464f86e9725991
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
2023-02-23 10:33:39 -08:00
Marc Mutz
4a9e918d4e QMessagePattern: don't use strncpy()
When Qt is configured to return nullptr from isNull() QStrings
(QT5_NULL_STRINGS != 1), then we'd be feeding a nullptr src into
strncpy(), which is UB. I couldn't rule the case of a null QString
lexeme out with local reasoning, seeing as the code is in the else
branch of an if (lexeme.startsWith(~~~) && lexeme.endsWith(~~~)), so
it might be null.

Instead of porting to qstrncpy(), which can deal with a nullptr src
(albeit up to recently, badly), note that the strncpy + the char[]
allocation is a qstrdup(), so use that instead. This also does away
with the queasiness of taking the size() of a UTF-16 string to limit
strncpy() for the L1-recoded version (which, in this instance is safe,
as toLatin1().constData() is NUL-terminated, but in some other
instances was not).

As a drive-by, make sure we don't leak the strdup()'ed string if the
emplace_back() fails.

Amends be98fa32c7d56ea91359b647a329356fa44eca04.

Qt 5 is not affected, as constData() never returns nullptr there.

Pick-to: 6.5 6.4 6.2
Change-Id: I178d356e560d2749cd6ce0b9364c710a2d117304
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-02-22 18:24:16 +00:00
Antti Määttä
4ce1c1d932 Trace: Convert qtcore module to use tracepointgen tool
Pick-to: 6.5
Change-Id: I379896280a16cd0b94d7ee9d0cfcca4afe64b9fe
Reviewed-by: Hatem ElKharashy <hatem.elkharashy@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io>
2023-02-10 12:39:47 +02:00
Peter Varga
97b32fa0b6 Fix clang-cl compiler warnings
- known but unsupported action 'shared' for '#pragma section'
  [-Wignored-pragmas]
- #include resolved using non-portable Microsoft search rules
  [-Wmicrosoft-include]
- variable is used uninitialized whenever switch default is taken
  [-Wsometimes-uninitialized]

Change-Id: I466352ff97a2bcf07e706c045568e581dd08a94e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-12-15 23:16:04 +01:00
Giuseppe D'Angelo
eb63f2eb05 QMessageLogger: make qFatal categorized and streamable
There is no technical reason why qFatal shouldn't support categorized
logging, nor have a streaming version.

There is perhaps an API issue, that is, a streaming syntax may encourage
users to do "too much":

  qFatal() << gatherLogs() << saveDatabase() << ...;

and that sounds like a bad idea in case the application is in an
unrecoverable state that requires immedate terminatation (indeed,
through qFatal). I'd err on the side of providing the extra convenience.

This commits adds overloads of QMessageLogger::fatal to support
categorized logging (note that fatal messages cannot be disabled),
the relative qCFatal macro, as well as overloads for streaming.

[ChangeLog][QtCore][QMessageLogger] QMessageLogger::fatal now supports
categorized logging, for instance using the qCFatal(category) macro.
Moreover, qFatal() and qCFatal() now support streaming of values
to be printed in the fatal message.

Change-Id: Ia57f25f5c85fca97e5fcf27eaa760dbde09cba0e
Fixes: QTBUG-8298
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-12-05 04:15:39 +01:00
Johannes Kauffmann
6707b881cf qlogging: avoid C-style casts
Amends e38a48200b7e0d20c0ab564bb59bd978d72677b7.

Pick-to: 6.2 6.4
Change-Id: I053cb676398ae3ebc2ba68f0bf7359a0870303bc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-10-28 01:31:31 +02:00
Johannes Kauffmann
e38a48200b qlogging: use qsizetype to fix Wconversion warnings
While the strlen() calls don't raise warnings themselves, it seems like
they were artifacts of indexOf() returning int instead of qsizetype.

Task-number: QTBUG-103527
Pick-to: 6.2 6.4
Change-Id: I32fbf69feca38a5977dde084bef9993f24843ccf
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-10-25 16:39:25 +02:00
Marc Mutz
df9d882d41 Port from container.count()/length() to size()
This is semantic patch using ClangTidyTransformator:

  auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o)
  makeRule(cxxMemberCallExpr(on(QtContainerClass),
                             callee(cxxMethodDecl(hasAnyName({"count", "length"),
                                                  parameterCountIs(0))))),
           changeTo(cat(access(o, cat("size"), "()"))),
           cat("use 'size()' instead of 'count()/length()'"))

a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'.

<classes> are:

    // sequential:
    "QByteArray",
    "QList",
    "QQueue",
    "QStack",
    "QString",
    "QVarLengthArray",
    "QVector",
    // associative:
    "QHash",
    "QMultiHash",
    "QMap",
    "QMultiMap",
    "QSet",
    // Qt has no QMultiSet

Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-04 07:40:08 +02:00
Thiago Macieira
7d7d4671bd Logging: remove const from the lambda calling dladdr
In some OSes, the function takes a plain void*.

Pick-to: 6.4
Fixes: QTBUG-106980
Change-Id: I810d70e579eb4e2c8e45fffd1718bdaf94d8ac0e
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2022-09-27 16:19:27 -07:00
Sona Kurazyan
bee606b091 Extract overview page for QtLogging header from QtGlobal docs
Task-number: QTBUG-106154
Change-Id: I7a60225bc8d848f52c3f51f8f4d0a360cb4ea744
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-09-21 14:00:44 +02:00
Sona Kurazyan
473e5f111f Fix docs for types and macros from qlogging.h
Move the docs types and macros from qlogging.h from qglobal.cpp to
qlogging.cpp. Generate the QtLogging forward header and update the
'\relates' commands accordingly.

Change-Id: I2abaf531b2749ff43909f835efd980e1fc98f278
Task-numer: QTBUG-106154
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-09-01 20:45:15 +02:00
Kai Köhne
54e01d50f4 Doc: Generalize info about -rdynamic to be not qmake specific
Pick-to: 6.4
Fixes: QTBUG-88044
Change-Id: I079cb75b5a5c32e38dec73474c967cc836d94b68
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-08-24 17:50:25 +02:00
Morten Sørvig
36fa489cb8 wasm: remove message handler lock
We have now upgraded the minimum emsdk to one where Emscripten properly
synchronizes stdout/stderr output.

Pick-to: 6.4
Change-Id: I537897b31916a52303a3fdb1d255f03b4aeaffef
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-07-06 17:56:58 +02:00
Lucie Gérard
05fc3aef53 Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-05-16 16:37:38 +02:00
Volker Hilsheimer
58df315ad1 Fix compiler warning from deprecated QString conversion
Use the string literals instead.

Change-Id: Ic85d0845c211744a79af7e48b180129797d3d612
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-05-06 03:22:14 +02:00
Łukasz Korbel
f10d0c781e Ensure tag used for logging on Android does not contain spaces
Tag passed to __android_log_print shouldn't contain spaces because
filter-spec used by adb logcat expects space-separeate list of
tag:priority specifiers. Effectively, its not possible to filter tag
using logcat if Qt's application name has spaces.

Pick-to: 6.2 6.3
Change-Id: I52b706b7a368d0700db45c0406bbfef279bc61fb
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2022-04-21 15:43:25 +07:00
Marc Mutz
32692667a6 Apply Q_CONSTINIT across the codebase
Still not complete. Just grepping for static and thread_local.

Task-number: QTBUG-100486
Change-Id: I90ca14e8db3a95590ecde5f89924cf6fcc9755a3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-29 06:18:49 +01:00
Marc Mutz
80b6bcc385 Short live Q_CONSTINIT!
It expands to the first available of

- constinit (C++20)
- [[clang::require_constant_initialization]] (Clang)
- __constinit (GCC >= 10)

Use it around the code (on and near static QBasicAtomic; this patch
makes no attempt to find all statics in qtbase).

[ChangeLog][QtCore][QtGlobal] Added macro Q_CONSTINIT.

Fixes: QTBUG-100484
Change-Id: I11e0363a7acb3464476859d12ec7f94319d82be7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-26 17:15:02 +01:00
Sona Kurazyan
b625195893 QtCore: Replace remaining uses of QLatin1String with QLatin1StringView
Task-number: QTBUG-98434
Change-Id: Ib7c5fc0aaca6ef33b93c7486e99502c555bf20bc
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-26 01:44:05 +01:00
Sona Kurazyan
753a08ae0e QtCore: replace QLatin1String/QLatin1Char with _L1/u'' where applicable
As a drive-by, did also minor refactorings/improvements.

Task-number: QTBUG-98434
Change-Id: I81964176ae2f07ea63674c96f47f9c6aa046854f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
2022-03-25 19:16:29 +01:00
Thiago Macieira
0c3ac95899 Logging: use GCC #pragma to suppress the frame pointer
We have a few lambdas now. However, GCC probably inlines everything
anyway in release mode, so this is likely moot.

Change-Id: Ic15405335d804bdea761fffd16d50573621446ab
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:12 -08:00
Thiago Macieira
bd728d1149 Logging: cache the last library file name in a backtrace
They usually come in groups, so this avoids extra work.

Change-Id: Ic15405335d804bdea761fffd16d4fb5c41e122f0
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
ff2535de5c Logging: add support for decoding backtraces using dladdr()
I'm pretty sure that's what backtrace_symbols() uses internally anyway,
so skip the middle-man.

Change-Id: Ic15405335d804bdea761fffd16d4fb2a1b0c2171
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
1cad4ed6a1 Logging: reorganize the backtrace code for simplicity and readability
Also removed the Qt::CaseInsensitive searching, which was slow.

Change-Id: Ic15405335d804bdea761fffd16d4f863847c360b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
ee7166e176 Logging: remove magic constant from backtrace code
Explain what that number 8 is by way of a comment and a constant.

Pick-to: 6.2 6.3
Change-Id: Ic15405335d804bdea761fffd16d4f7567089c575
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
6358bc9331 Logging: rejiggle the way we detect the availability of backtrace() API
We had proper CMake tests for all we needed, so we can drop the old
detection we were forced to use way back when. Said test (CMake's own
FindBacktrace.cmake) even found QNX's offering, which we reported as
"yes" in our configure output, but never actually used because it was a
different API. Now we'll report "no" for QNX.

Pick-to: 6.3
Change-Id: Ic15405335d804bdea761fffd16d4f73cfe4cf38a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
50132fb54b Logging: fix encoding of backtrace lines
File and function names are UTF-8 on Unix.

Pick-to: 6.2 6.3
Change-Id: Ic15405335d804bdea761fffd16d4fb71ec2b0d71
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira
6323ccfa73 qsimd: Remove QT_COMPILER_SUPPORTS_SIMD_ALWAYS
All[*] compilers support it, always. The last to not support it was GCC
4.8, which we don't support in Qt 6.

[*] Anecdotally, clang-cl doesn't but clang-cl isn't supported and that
would be an upstream problem: clang-cl developers must find a solution
that either matches Clang or cl.exe.

Change-Id: I54f205f6b7314351b078fffd16d0a5ed5b7afae5
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2022-02-18 15:46:41 -08:00
Pasi Petäjäjärvi
f1d521f076 QNX: Silence compiler warning by initializing variable
qtbase/src/corelib/global/qlogging.cpp: In function 'void qDefaultMessageHandler(QtMsgType, const QMessageLogContext&, const QString&)':
qtbase/src/corelib/global/qlogging.cpp:1555:11: warning: 'severity' may be used uninitialized in this function [-Wmaybe-uninitialized]
     slog2c(NULL, QT_LOG_CODE, severity, formattedMessage.toLocal8Bit().constData());
qtbase/src/corelib/global/qlogging.cpp:1535:9: note: 'severity' was declared here
     int severity;

Pick-to: 6.2 6.3 5.15
Change-Id: Ic0d41a024056528cac51a88086ac7e492c94bb4a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-02-18 12:44:40 +00:00
Morten Johan Sørvig
5a47e29914 wasm: prevent thread cross-talk when logging
Emscriptens implementation of fprintf does not provide
mutal exclusion when called from multiple threads, for
the emsdk versions Qt 5.15, Qt 6.2, and current dev
is using.

Pick-to: 5.15 6.2
Change-Id: Ied92730b735b11e4e5e85442de48fc25cbad0611
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2021-12-21 15:05:19 +00:00
Marc Mutz
7ef6140170 QLogging: fix potential missing NUL-terminator when calling OutputDebugString
The string returned from QStringView::utf16() is, in general, not
NUL-terminated, as OutputDebugString() requires. Though we only ever
call win_outputDebugString_helper() with an actual QString, it's not
100% clear said QString doesn't originate from, say, a QStringLiteral,
in which case QString::utf16() would have to (an does) detach() to
ensure the NUL-termination.

So, take by const QString&, but use QStringView::mid() to avoid
copying the substring content twice.

Amends a049325cc708b483ed1aadc6589419f4d74b19f3.

Pick-to: 6.3 6.2 5.15
Change-Id: Ie42a6000c75c6a55d629621d89e0cf498b174d29
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-12-15 18:35:13 +01:00
Ivan Tkachenko
e65c29fffc Doc: Reword, fix typos and some formatting
Change-Id: I0929f7653cb07665842d0aa7bf18dc80471febdc
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2021-12-08 02:28:34 +03:00
Ivan Solovev
164e575673 Fix -trace build on Windows
The TraceLoggingValue template does not have overloads for Qt
types, so it was throwing multiple template instantiation errors
while trying to log the unknown types.
Fix it by serializing such types to QString using QDebug::toString,
and the logging this string.

Apart from that, fixes some other compiler errors on Windows build
with -trace enabled:
- implicit size_t to ULONG conversion
- complaints on std::min
- add QT_BEGIN_NAMESPACE/QT_END_NAMESPACE to the generated
  *_tracepoints_p.h headers to fix the namespace build.

Task-number: QTBUG-97246
Fixes: QTBUG-97241
Pick-to: 6.2
Change-Id: Ifba134bab8d7fda7f1e30da9938e25cae813e1c6
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-10-25 14:57:18 +02:00
Kevin Funk
f08704330d qtlogging: Document QT_MESSAGELOGCONTEXT define
Document it here to let people know about the pitfalls with some
placeholder values. Link the QMessageLogContext class doc for more information.

Pick-to: 6.2
Change-Id: I8e7b4c0dcb8bceeeee645664c98e63ae7ca7e854
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2021-10-14 08:31:31 +00:00
Jonas Kvinge
231fec7ca2 corelib: Fix typos in source code comments
Pick-to: 6.2
Change-Id: Ic78afb67143112468c6f84677ac88f27a74b53aa
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-10-12 12:52:02 +02:00
Tor Arne Vestbø
8f13af5d7b Add private qAbort helper function
Used from qt_message_fatal(), but is useful in other situations too.

Change-Id: I3c0e438536d40271061c76d954c7878abfe37b8e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2021-09-22 22:44:19 +00:00
Edward Welbourne
7a4b586f4b Remove conditioning on Android embedded
It is no longer handled separately from Android.
This effectively reverts commit 6d50f746fe05a7008b63818e77784dd0c99270a1

Change-Id: Ic2d75b8c5a09895810913311ab2fe3355d4d2983
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-09-17 17:30:14 +02:00
Assam Boudjelthia
87d8ee755b Fix usage of logging category on Android
Android logs have a tag/category field in each log entry,
which currently if defined by Qt, it's being included as part
of the message and not used as a tag as it's supposed to be.

This patch fixes that behavior. If a non-default category
is defined, it will be used as a tag, otherwise the application
name is used as before.

Pick-to: 6.2
Fixes: QTBUG-94708
Change-Id: Ie56187f23a47cda6d82e14fdec7c8903d3ee40b6
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2021-06-28 16:10:16 +03:00
Giuseppe D'Angelo
86ad338aa4 Q{*String,ByteArray}View::length(): use qsizetype, not int
Looks like these ones have been forgotten in the Qt 5 -> 6 upgrade
to qsizetype. Change them to return qsizetype as well,
and fix the docs. Being entirely inline, non-exported classes, we
should be able to get away with it without affecting binary
compatibility. Moreover, there's no reason for keeping them
deprecated.

Requires some minor adjustments, just like the ones done for
size()'s changes.

[ChangeLog][QtCore][QStringView] The length() function
now returns `qsizetype`, not `int`, for consistency with the
other string and container classes in Qt. Following this
change, it has been un-deprecated.

[ChangeLog][QtCore][QAnyStringView] The length() function
now returns `qsizetype`, not `int`, for consistency with the
other string and container classes in Qt. Following this
change, it has been un-deprecated.

[ChangeLog][QtCore][QUtf8StringView] The length() function
now returns `qsizetype`, not `int`, for consistency with the
other string and container classes in Qt. Following this
change, it has been un-deprecated.

[ChangeLog][QtCore][QByteArrayView] The length() function
now returns `qsizetype`, not `int`, for consistency with the
other string and container classes in Qt. Following this
change, it has been un-deprecated.

Fixes: QTBUG-92496
Change-Id: Ie0f4939d1083884e95d4725f891b6c6764532cb8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2021-04-15 01:09:44 +02:00
Thiago Macieira
af520c8ef3 Use QDeadlineTimer in qlogging.cpp
No change, just shorter code.

Change-Id: I25d85d86649448d5b2b3fffd1450f95b0ec66927
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-12-09 12:55:21 -07:00
Andreas Buhr
0440614af0 Replace discouraged Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPE
Q_MOVABLE_TYPE was conceived before C++ had move semantics. Now, with
move semantics, its name is misleading. Q_RELOCATABLE_TYPE was
introduced as a synonym to Q_MOVABLE_TYPE. Usage of Q_MOVABLE_TYPE
is discouraged now. This patch replaces all usages of Q_MOVABLE_TYPE
by Q_RELOCATABLE_TYPE in QtBase. As the two are synonymous, this
patch should have no impact on users.

Pick-to: 6.0
Change-Id: Ie653984363198c1aeb1f70f8e0fa189aae38eb5c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-30 17:16:21 +01:00