Hacking:Tools: Difference between revisions
Content deleted Content added
No edit summary |
|||
(13 intermediate revisions by 4 users not shown) | |||
Line 1:
__TOC__
==
The Seamly2D code repository is on Github: https://github.com/FashionFreedom/Seamly2D
Please learn Git and workflow guidelines:
# Basic Git: https://zaiste.net/git_for_busy_people/
# The Git Flow method: https://datasift.github.io/gitflow/IntroducingGitFlow.html/
# Using semantic commit messages: https://seesparkbox.com/foundry/semantic_commit_messages/
== Canonical/Ubuntu Launchpad and Bazaar ==
Launchpad automatically mirrors the Seamly2D git repo here: https://launchpad.net/~susan-spencer/+archive/ubuntu/seamly2d
== Qt Creator ==
When you use Qt you have two IDE to choose: Qt Creator and Visual Studio
For effective
* Qt Creator supports
* Qt Creator's file wizard allow you to select correct file where it add files.
* [https://doc.qt.io/qtcreator/creator-keyboard-shortcuts.html Keyboard Shortcuts].
* [https://doc.qt.io/qtcreator/creator-editor-refactoring.html Refactoring].
* [https://doc.qt.io/qtcreator/creator-code-style-settings.html Specifying Code Style Settings].
* Set path to License template. '''Tools->Options->C++->File Naming'''. Example of license template for project you can find in '''<root>/share''' directory. Move it to another directory outside of the project directory and then change name of an author.
* Set max length of source code line equal 120 characters. '''Tools->Options->Text Editor->Display'''.
* Compile faster. For this use -j key for make. '''Projects->Build Steps->Make''' add -jX - where X number of cpu in your system.
* Don't forget Qt Creator
See '''[[Hacking:Tools:QtCreator:Ubuntu]]''' for description of installing and configuring Qt on 64-bit Ubuntu 14.04.
See '''[[Hacking:Tools:QtCreator:Windows10|Hacking:Tools:QtCreator:Windows10]]''' for description of installing and configuring Qt on 64-bit Windows 10.
== Address Sanitizer ==
Line 68 ⟶ 54:
</source>
In '''debug mode'''
=== How to use it? ===
Just run
asan_symbolize.py also awailible in
=== Example of use ===
After program abort we will get a stack trace.
<source lang="bash">
=================================================================
==26506== ERROR: AddressSanitizer: heap-buffer-overflow on address 0xa9f5b808 at pc 0x80b94ff bp 0xbf9b0b38 sp 0xbf9b0b2c
READ of size 4 at 0xa9f5b808 thread T0
#0 0x80b94fe (/home/
#1 0x80af9d0 (/home/
#2 0xb4eefd0b (/usr/lib/i386-linux-gnu/libQt5Core.so.5.2.1+0x250d0b)
#3 0xb56a1e00 (/usr/lib/i386-linux-gnu/libQt5Widgets.so.5.2.1+0xd7e00)
#4 0xb56a7800 (/usr/lib/i386-linux-gnu/libQt5Widgets.so.5.2.1+0xdd800)
#5 0x8424abc (/home/
#6 0xb4eefae9 (/usr/lib/i386-linux-gnu/libQt5Core.so.5.2.1+0x250ae9)
#7 0xb4ef1f7a (/usr/lib/i386-linux-gnu/libQt5Core.so.5.2.1+0x252f7a)
Line 101 ⟶ 87:
#18 0xb51e2db3 (/usr/lib/i386-linux-gnu/libQt5Gui.so.5.2.1+0xaddb3)
#19 0xb56a0613 (/usr/lib/i386-linux-gnu/libQt5Widgets.so.5.2.1+0xd6613)
#20 0x845578f (/home/
#21 0xb4979a82 (/lib/i386-linux-gnu/libc-2.19.so+0x19a82)
#22 0x806b8f0 (/home/
0xa9f5b808 is located 12 bytes to the right of 12-byte region [0xa9f5b7f0,0xa9f5b7fc)
allocated by thread T0 here:
Line 109 ⟶ 95:
#1 0xb56e6a31 (/usr/lib/i386-linux-gnu/libQt5Widgets.so.5.2.1+0x11ca31)
#2 0xb56e6df4 (/usr/lib/i386-linux-gnu/libQt5Widgets.so.5.2.1+0x11cdf4)
#3 0x814e382 (/home/
#4 0x84a6e10 (/home/
#5 0x84606bc (/home/
#6 0x84d2372 (/home/
#7 0x84d1925 (/home/
#8 0x84d0364 (/home/
#9 0xb4f1964d (/usr/lib/i386-linux-gnu/libQt5Core.so.5.2.1+0x27a64d)
#10 0xb4f1a0ea (/usr/lib/i386-linux-gnu/libQt5Core.so.5.2.1+0x27b0ea)
Line 158 ⟶ 144:
Result will looks like:
<source lang="bash">
=================================================================
==26506== ERROR: AddressSanitizer: heap-buffer-overflow on address 0xa9f5b808 at pc 0x80b94ff bp 0xbf9b0b38 sp 0xbf9b0b2c
READ of size 4 at 0xa9f5b808 thread T0
#0 0x80b94fe in QKeyEvent::key() const /usr/include/qt5/QtGui/qevent.h:309
#1 0x80af9d0 in DialogTool::eventFilter(QObject*, QEvent*) /home/
#2 0xb4eefd0b in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) ??:?
#3 0xb56a1e00 in QApplicationPrivate::notify_helper(QObject*, QEvent*) ??:?
#4 0xb56a7800 in QApplication::notify(QObject*, QEvent*) ??:?
#5 0x8424abc in VApplication::notify(QObject*, QEvent*) /home/
#6 0xb4eefae9 in QCoreApplication::notifyInternal(QObject*, QEvent*) ??:?
#7 0xb4ef1f7a in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) ??:?
Line 182 ⟶ 168:
#18 0xb51e2db3 in QGuiApplication::exec() ??:?
#19 0xb56a0613 in QApplication::exec() ??:?
#20 0x845578f in main /home/
#21 0xb4979a82 in __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287
#22 0x806b8f0 in _start ??:?
Line 190 ⟶ 176:
#1 0xb56e6a31 in QWidgetPrivate::init(QWidget*, QFlags<Qt::WindowType>) ??:?
#2 0xb56e6df4 in QWidget::QWidget(QWidgetPrivate&, QWidget*, QFlags<Qt::WindowType>) ??:?
#3 0x814e382 in DialogEndLine::DialogEndLine(VContainer const*, unsigned int const&, QWidget*) /home/
#4 0x84a6e10 in void MainWindow::SetToolButtonWithApply<DialogEndLine, void (MainWindow::*)(int), void (MainWindow::*)()>(bool, Tool, QString const&, QString const&, void (MainWindow::*)(int), void (MainWindow::*)()) /home/
#5 0x84606bc in MainWindow::ToolEndLine(bool) /home/
#6 0x84d2372 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<bool>, void, void (MainWindow::*)(bool)>::call(void (MainWindow::*)(bool), MainWindow*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:508 (discriminator 3)
#7 0x84d1925 in void QtPrivate::FunctionPointer<void (MainWindow::*)(bool)>::call<QtPrivate::List<bool>, void>(void (MainWindow::*)(bool), MainWindow*, void**) /usr/include/qt5/QtCore/qobjectdefs_impl.h:527
Line 230 ⟶ 216:
=== Known issue ===
For debug creation a layout need allocate big size of memory for images. Address Sanitizer doesn't support this. For avoiding this bug we recommend build
Have fun hunting down memory issues.
|