Wykrzaczanie się po kompilacji release

Odpowiedz Nowy wątek
2019-06-15 21:08
0

Bracia

Czego mogę użyć w przedziwnej sytuacji, kiedy program skompilowany zaraz po uruchomieniu wywala
wywrotka.PNG
do wyciągnięcia informacji co do Peruna jest nie tak?
Co dziwniejsze, nie używam niczego z VS, a co jeszcze dziwniejsze, aplikacja odpalona z Qt Creatora działa dobrze.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-07-11 19:10
czyli nie kompilacja się wykrzacza -> popraw temat - AnyKtokolwiek 2019-07-11 18:41

Pozostało 580 znaków

2019-06-15 21:15
1

Odpal pod WinDBG i prześledź, co aplikacja dokładnie robi. Sprawdź też, jakiego runtime'u dokładnie chcesz używać i go przeinstaluj, może coś mu się wysypało (chodzi o te całe C++ Redistributable).

Sprawdź na innej maszynie, jak tam problem nie występuje, to pewnie masz jakąś binarkę zwaloną.

Zerknij na https://answers.microsoft.com[...]424c-aca1-ab5174df0bc9?auth=1

edytowany 1x, ostatnio: Afish, 2019-06-15 21:16

Pozostało 580 znaków

2019-06-15 22:06
kq
1

Pewnie skopiowałeś CRT albo inną libkę z niewłaściwego katalogu. Użyj windeployqt i zobacz czy program nadal występuje.


Pozostało 580 znaków

2019-06-15 22:52
0

Udało mi się wyizolować rewizję w SVN od której zaczęło się sypać, więc jakiś punkt zaczepienia jest.
@Afish
Udało się użyć "attach" do procesu przy pomocy Visual Studio, ale co dalej?
@kq
Raczej nie, bo kopiowanie mam załatwione Inno Setupem, i folderu w którym trzymam wyizolowane libki nie zmieniałem.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2019-06-15 23:04
0

VS raczej Ci nie pomoże, chyba że przejdziesz nim po kodzie maszynowym i dokładnie sprawdzisz, co tam się dzieje. Na 95% używasz złej wersji CRT, więc możesz to debugować, ale będzie to wymagało wiedzy o bebechach pod kodem C++ (konwencje wywołania itp). Ja bym raczej szedł w upewnienie się, że na innym systemie to nie występuje i potem przeinstalowanie środowiska.

No dobrze, a czy zła wersja CRT wyjaśnia, czemu jak tam powrót 2 rewizje wstecz to wtedy działa? - MasterBLB 2019-06-16 00:16
Jeżeli jest to spowodowane niepoprawną wersją CRT, to jak najbardziej może tak być. Ten problem występuje tylko u Ciebie, czy u innych też? - Afish 2019-06-16 03:48

Pozostało 580 znaków

2019-06-15 23:27
kq
0

Ach, myślałem, że nowy program. W takim razie zobacz jaka najmniejsza zmiana powoduje takie zachowanie - zresztą wątpię abyś potrzebował tutoriala jak debugować ;​) Z doświadczenia, zobacz czy gdzieś nie masz uncaught exception albo nie jest wywoływane abort(). Dodatkowo, jeśli wszystko inne odpada - zobacz czy zreprodukujesz problem budując z -lasan, bardzo pomaga.


-lasan? Co to, flaga kompilacji? - MasterBLB 2019-06-15 23:43
W sumie tak. Jak kompilujesz jakimkolwiek relatywnie nowym clangiem/gcc (mingw też) to możesz dodać instrumentację address sanitizerem. Dużo błędów tak wyłapałem. - kq 2019-06-15 23:44
Niestety, z tego co w góglach mówią asan nie jest dostępny pod windows - MasterBLB 2019-06-15 23:58
Kurde, dałbym sobie rękę uciąć że działało... Ale faktycznie, najwyraźniej nie. Alternatywnie możesz skompilować na linuksie? - kq 2019-06-16 00:02

Pozostało 580 znaków

2019-06-16 08:37
0

Tak apropos działania u kogoś innego - łapcie instalator Bracia @kq i @Afish:
MechDesigner v0.74 Installer.rar
Co prawda aby zadziałał w pełni to musielibyście mieć zainstalowanego Battletecha, ale jak wyświetli messageboxa z informacją, że brakuje mu ścieżki do danych, a potem OpenFileDialog do znalezienia battletech.exe to będzie oznaczało, że działa prawidłowo.
W razie jakby ktoś się bał odpalać exeka to alternatywnie może użyć jakiegoś inno script unpackera.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-06-16 08:37

Pozostało 580 znaków

2019-06-16 08:45
1

Od rana chłodek, to i mózg pracuje należycie - odpaliłem dependency walkera, a ten że brakuje IESHIMS.DLL
Poszukam tego i wrzucę do folderu instalacyjnego.

EDIT:
Niestety, to nie to.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-06-16 10:48

Pozostało 580 znaków

2019-06-16 11:02
0

Spróbuj skompilować kod z flagą -g, a resztą bez zmian (odpowiednik konfiguracji RelWithDebugInfo) i odpal pod gdb - może wtedy coś znajdziesz.

Pozostało 580 znaków

2019-06-16 13:42
0

Dziwna sprawa.
Dałem debug info do pliku poprzez wpis w *.pro:

CONFIG += force_debug_info

Dodało się, bo plik z 1.24 MB urósł do 21 MB, mniej więcej tyle ma po kompilacji Debug.
Ok, odpalam program, oczywiście wywrotka, to używam w Qt Creatorze attach to process - A TU ZONK, przy opisie .exe jest "does not contain symbols info" o.O


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-06-16 13:42

Pozostało 580 znaków

2019-06-16 15:41

PRZYGWOŹDZIŁEM BUGA SKURWYSYNA!

Chwalić Swaroga, że aplikacja w kompilacji Debug też się wywalała. W takim wypadku wiadomo było co robić, attach Qt Creatora do procesu, i przeszukanie stosu - tym razem było pokazane gdzie w moim kodzie się posypało. Oto co się okazało - miałem sobie taką klasę:

class CostCalculator
{
public:
    CostCalculator(unsigned int baseCost);
    ~CostCalculator() = default;

    unsigned int calculateCost() const;

    void equipmentCostChange(int itemCostDelta);
    void armorCostChange(int armorAmountDelta);

    void operator=(const CostCalculator &other);

private:
    static unsigned int adjustmentThreshold;
    static unsigned int armorCostPerPoint;

    unsigned int baseCost = 0;
    unsigned int totalEquipmentCost = 0;
    unsigned int totalArmor = 0;
};
//i .cpp
#include "costcalculator.h"

unsigned int CostCalculator::adjustmentThreshold = SettingsFileDatabase::getInstance().getCostAlignmentThreshold();
unsigned int CostCalculator::armorCostPerPoint = GameConstantsDatabase::getInstance().getArmorCostPerPoint();

CostCalculator::CostCalculator(unsigned int baseCost)
:baseCost(baseCost)
{    
}

void CostCalculator::operator=(const CostCalculator &other)
{
    baseCost = other.baseCost;
    totalArmor = other.totalArmor;
    totalEquipmentCost = other.totalEquipmentCost;
}

unsigned int CostCalculator::calculateCost() const
{
    uint cost = baseCost + totalEquipmentCost;
    cost += totalArmor * armorCostPerPoint;
    //adjust the cost up to nearest threshold
    cost = ceil((double)cost / (double)adjustmentThreshold) * adjustmentThreshold;
    return cost;
}

void CostCalculator::equipmentCostChange(int itemCostDelta)
{
    totalEquipmentCost += itemCostDelta;
}

void CostCalculator::armorCostChange(int armorAmountDelta)
{
    totalArmor += armorAmountDelta;
}

Owe Database to leniwe singletony, tworzone kiedy po raz pierwszy wywoła się getInstance():

SettingsFileDatabase& SettingsFileDatabase::getInstance()
{
    static SettingsFileDatabase manager;
    return manager;
}

i to owe zmienne adjustmentThreshold oraz armorCostPerPoint przy zdefiniowaniu jako static powodują wywrotkę aplikacji. Jak dałem je jako zwykłe pola klasy, inicjowane w konstruktorze to problem ustąpił.

Co jeszcze - flaga kompilacji jakiej używam w .pro

Release: QMAKE_CXXFLAGS += -O3 -mpreferred-stack-boundary=2 -finline-small-functions -momit-leaf-frame-pointer

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2019-06-16 16:40
Czyli ugryzła Cię kolejność inicjalizacji przed mainem :​/ - kq 2019-06-16 16:00
To co mnie zastanawia Bracie @kq to czemu odpalane z poziomu IDE się nie wysypało - MasterBLB 2019-06-16 19:17

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0