Qt Creator ManualTests DebuggerCdb: Difference between revisions
Jump to navigation
Jump to search
Henri Vikki (talk | contribs) (Table) |
(Clarify what the comments in simple.pro are for) |
||
(22 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Tools::QtCreator::QualityAssurance]] | [[Category:Tools::QtCreator::QualityAssurance]] | ||
For the following tests, you will need to build projects on Qt using MSVC and debug them using cdb. You can get a suitable build of Qt from the official [https://download.qt.io/official_releases/online_installers/ Online Installer]. | |||
{| class="wikitable" | |||
|+ Tests using ''tests/manual/debugger/simple/simple.pro'' from Qt Creator's source repository | |||
! Test | |||
tests/manual/debugger/simple/simple.pro | ! Result | ||
! Annotation | |||
|+ | |||
! Test | |||
! Result | |||
! Annotation | |||
| | |||
| Create new project. Can you build, run and debug it? | | Create new project. Can you build, run and debug it? | ||
| automated | | automated | ||
| | | | ||
|- | |- | ||
| Set breakpoint, press F5 to build and run debugger, verify that program stops at breakpoint: | | Set breakpoint, press F5 to build and run debugger, verify that program stops at a breakpoint that you set: | ||
* | * in main function before program is started | ||
* while the program is running | * while the program is running | ||
* in dynamically loaded plugins, especially in constructors | * in dynamically loaded plugins, especially in constructors | ||
Line 30: | Line 25: | ||
| | | | ||
|- | |- | ||
| "Step into" a couple of times. Can you step into Qt source code ( | | "Step into" a couple of times. Can you step into Qt source code (*.cpp file under QTDIR. You might need to configure source paths mapping under "Edit" -> "Preferences…" -> "Debugger" -> "General" -> "Add Qt sources...")? | ||
| | | | ||
| | | | ||
|- | |- | ||
| Test debugging helpers: Do classes like QImage or std::string show beautiful information instead of the raw structure? | | Test debugging helpers: Do classes like QImage or std::string show beautiful information instead of the raw structure? | ||
| | | automated | ||
| | | | ||
|- | |- | ||
| | | Step through some (not all) test* functions and check whether the displayed data looks correct | ||
| | | | ||
| The code contains comments with the expected displayed data. These are meant for semi-automatic runs and might differ from what you see. Use your own judgement what's correct and what's not. | |||
|- | |- | ||
| | | Comment out the return statement inside the following functions one by one. Check whether you'll end up with a proper stack trace & locals display. | ||
* testNullPointerDeref() | |||
* testNullReference() | |||
* testEndlessLoop(); (break manually) | |||
* testEndlessRecursion(); | |||
* testUncaughtException(); | |||
| | | | ||
| | | | ||
|- | |- | ||
| | | Test a breakpoint in a QThread: | ||
# Uncomment the call to qthread::testQThread() | |||
# Place a breakpoint in qthread::Thread::run() | |||
# Run this in the debugger | |||
# Make sure that: | |||
#* the breakpoint receives the right number of hits | |||
#* "Locals and Expressions" and "Stack" views show reasonable data, including the object names of the threads | |||
| | |||
| | | | ||
| | |||
|- | |- | ||
| Switch on temporarily 'Operate by Instruction' (small icon above the stack trace) and check whether you see disassembler output and can step by instruction | |||
| | |||
|} | |||
{| class="wikitable" | |||
|+ Tests using ''tests/manual/debugger/cli-io/cli-io.pro'' from Qt Creator's source repository | |||
! Test | |||
! Result | |||
! Annotation | |||
|+ | |||
| Check I/O (qDebug, std::cout, std::cerr), on Win for both Debug and Release. Please read the below note! | | Check I/O (qDebug, std::cout, std::cerr), on Win for both Debug and Release. Please read the below note! | ||
| | | | ||
Line 66: | Line 75: | ||
|- | |- | ||
| Check nothing bad happens on a simple int main() {} program with no breakpoints set | | Check nothing bad happens on a simple int main() {} program with no breakpoints set | ||
| automated | | automated | ||
| | | | ||
| | |} | ||
{| class="wikitable" | |||
|+ Tests using ''tests/manual/debugger/gui/gui.pro'' from Qt Creator's source repository | |||
! Test | |||
! Result | |||
! Annotation | |||
|+ | |||
| Check registering for post-mortem debugging: | | Check registering for post-mortem debugging: | ||
# Go to " | # Go to "Edit" -> "Preferences…" -> "Debugger" -> "General". | ||
# Toggle "Use Qt Creator for post-mortem debugging" | # Toggle "Use Qt Creator for post-mortem debugging" | ||
# Click "OK" | # Click "OK" | ||
# Go to " | # Go to "Edit" -> "Preferences…" -> "Debugger"-> "General" again. | ||
# Verify that the check box "Use Qt Creator for post-mortem debugging" reflects the changes you made in step 2. | # Verify that the check box "Use Qt Creator for post-mortem debugging" reflects the changes you made in step 2. | ||
| | | | ||
Line 82: | Line 98: | ||
| | | | ||
|- | |- | ||
| Attach to | | | ||
# Start the project from outside Creator, e.g. from the command line. | |||
# Attach Creator to the running process.<br/>Verify that you see a stack trace, variable values and code markers just as if you had run the application in the debugger from the beginning. You should also be able to pause/continue the execution. | |||
| | | | ||
| | | | ||
Line 95: | Line 113: | ||
== Breakpoint module resolution == | == Breakpoint module resolution == | ||
* Set a new breakpoint in application code (say 'testapp'). Hover over breakpoint | * Set a new breakpoint in application code (say 'testapp'). | ||
* Start the application, make it stop at breakpoint | * Right-click into the breakpoint view and make sure that "Use Tooltips (...)" is checked. | ||
* Finish debugging, restart debugger. Should be faster now | * Hover over breakpoint view, verify that 'Module' is empty in tooltip. | ||
* Start the application, make it stop at breakpoint. | |||
* Finish debugging, restart debugger. Should be faster now. | |||
* Display tooltip of breakpoint again. Module should now be something 'testapp'. | * Display tooltip of breakpoint again. Module should now be something 'testapp'. | ||
== stderr/stdout handling on Windows == | == stderr/stdout handling on Windows == | ||
* An application needs to be built with 'console' for stderr/stdout to appear (use | * An application needs to be built with 'console' for stderr/stdout to appear (use Creator's "Run in terminal" setting) | ||
* Creator itself is built with 'console' in debug mode only. | * Creator itself is built with 'console' in debug mode only. | ||
* qDebug() prints to stderr for 'console' apps, else to the Windows debugger log, which can be shown with the DbgView utility | * qDebug() prints to stderr for 'console' apps, else to the Windows debugger log, which can be shown with the DbgView utility | ||
* CDB will catch only qDebug() when app is built without ‘console’, rest goes to app console as with normal Windows app |
Latest revision as of 10:47, 30 June 2023
For the following tests, you will need to build projects on Qt using MSVC and debug them using cdb. You can get a suitable build of Qt from the official Online Installer.
Test | Result | Annotation |
---|---|---|
Create new project. Can you build, run and debug it? | automated | |
Set breakpoint, press F5 to build and run debugger, verify that program stops at a breakpoint that you set:
|
||
Test breakpoint module resolution (see below) | ||
"Step into" a couple of times. Can you step into Qt source code (*.cpp file under QTDIR. You might need to configure source paths mapping under "Edit" -> "Preferences…" -> "Debugger" -> "General" -> "Add Qt sources...")? | ||
Test debugging helpers: Do classes like QImage or std::string show beautiful information instead of the raw structure? | automated | |
Step through some (not all) test* functions and check whether the displayed data looks correct | The code contains comments with the expected displayed data. These are meant for semi-automatic runs and might differ from what you see. Use your own judgement what's correct and what's not. | |
Comment out the return statement inside the following functions one by one. Check whether you'll end up with a proper stack trace & locals display.
|
||
Test a breakpoint in a QThread:
|
||
Switch on temporarily 'Operate by Instruction' (small icon above the stack trace) and check whether you see disassembler output and can step by instruction |
Test | Result | Annotation |
---|---|---|
Check I/O (qDebug, std::cout, std::cerr), on Win for both Debug and Release. Please read the below note! | ||
Check "Run in Terminal". Use Terminal for input. | ||
Check nothing bad happens on a simple int main() {} program with no breakpoints set | automated |
Test | Result | Annotation |
---|---|---|
Check registering for post-mortem debugging:
|
||
Attach to a crashed process | ||
|
||
Test unusual situations: Kill X 'externally' while debugging (both in a 'running' and 'stopped' state), where X is
|
Breakpoint module resolution
- Set a new breakpoint in application code (say 'testapp').
- Right-click into the breakpoint view and make sure that "Use Tooltips (...)" is checked.
- Hover over breakpoint view, verify that 'Module' is empty in tooltip.
- Start the application, make it stop at breakpoint.
- Finish debugging, restart debugger. Should be faster now.
- Display tooltip of breakpoint again. Module should now be something 'testapp'.
stderr/stdout handling on Windows
- An application needs to be built with 'console' for stderr/stdout to appear (use Creator's "Run in terminal" setting)
- Creator itself is built with 'console' in debug mode only.
- qDebug() prints to stderr for 'console' apps, else to the Windows debugger log, which can be shown with the DbgView utility
- CDB will catch only qDebug() when app is built without ‘console’, rest goes to app console as with normal Windows app