Отладка приложения Flask - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь повторно использовать какое-то старое веб-приложение Flask, появившееся 2-3 года назад, которое, похоже, сломалось.

Я пытаюсь выяснить, в чем проблема, но у меня проблемы с системной отладкой.

Извините, я не могу предоставить более конкретный код, программа слишком большая и проблема в принципе неизвестна. Если бы мне пришлось угадывать, проблема происходила в этом сегменте:

elif resource=="shelfquery":
    print ("Shelf")
    if request.method=="PUT":
        userInput=request.form['userInput']
        print ("Shelf " + userInput)
        cur.execute ("SELECT * FROM picDB")
        for i in range (cur.rowcount):
            value=cur.fetchone ()
            if value is not None:
                searchTerm=value [0]
                print ("searchDB|")
                print (searchTerm)

        validInput=True
        try:
            # searchFind= ("SELECT searchString,pureJSON FROM nytDB where searchString LIKE %s")
            # searchVal= user
            if ("searchString" not in userInput and "searchDB" not in userInput and "DROP TABLE" not in userInput
                and "DELETE " not in userInput and "pureJSON" not in userInput and "*" not in userInput):
                cur.execute ("SELECT searchString,pureJSON FROM searchDB where searchString LIKE %s", [userInput])
            else:
                validInput=False
        except (MySQLdb.Error) as e:
            print ("Error1")
            print (e)

        print ("Row count ")
        # print (cur.rowcount)
        if cur.rowcount<=0:
            searchUrl=shelffURL + userInput + shelffURL2
            response = urllib2.urlopen(searchUrl)
            content=response.read ()

            jsonBalls= json.loads (content.decode ())
            if ("searchString" not in userInput and "searchDB" not in userInput and "DROP TABLE" not in userInput
                and "DELETE " not in userInput and "pureJSON" not in userInput and "*" not in userInput):
                cur.execute ("INSERT IGNORE INTO searchDB (searchString,pureJSON,readStatus) VALUES (%s,%s,%s)" ,(userInput,content,"unread"))
                db.commit ()
            else:
                print ("Invalid syntax, blocked to avoid SQL Injection")
                validInput=False




            return jsonify (jsonBalls)
        elif cur.rowcount>0 and validInput==True:
            value=cur.fetchone ()
            searchStringValue=value [0]
            jsonValue= value[1]
            # print ("Getting from searchDB")
            # print (searchStringValue)
            jsonValue2=json.loads (jsonValue.decode ())
            print (jsonValue)
            return jsonify (jsonValue2)
        else:
            return None

Так как именно здесь часто происходит ошибка (хотя и не единственное место). Соответствующий код javascript / jquery:

function addToBookShelf(methodType){
console.log ("Adding");

var userInputValue;

console.log (userInputValue);
if(methodType == "PUT" || methodType == "POST"){
    userInputValue = $('#userInput').val();
}else {
    userInputValue=methodType;
    methodType="PUT";
}
/*
    jQuery ajax does not send undefined data, so GET and DEL
    are sent without any params when userInputValue is not
    initialized.
*/
console.log ("Shelf query");
var picURL;
$.ajax({
    method: methodType,
    url: "/shelfquery",
    data: { userInput: encodeURI(userInputValue) }
})
.done(function( msg ) {
    console.log (msg);
    console.log ("Time to get photos");
    //$('#gallery').empty ();
    // for (i = 0; i<10 ; i++) {
    $.ajax({
        method: methodType,
        url: "/picquery",
        data: { userInput: encodeURI(userInputValue) }
        })
        .done(function( msg2 ) {
            console.log ("Save");
            console.log (msg2);
        id=msg2.items[0].volumeInfo.industryIdentifiers[0].identifier;
        volumeID=msg2.items[0].id;
        desc=msg2.items[0].volumeInfo.description;


        picURL=JSON.stringify(msg2['items'][0]['volumeInfo']['imageLinks']['thumbnail']);
        divStart="<div class=\"panel panel-primary col-lg-3 col-md-4 col-xs-6 thumb\" id=\"" + id +".." + volumeID +"\">"
        divMiddle="<div class=\"panel-body\">"
        divImge= "<img src=" + picURL + "class=\"img-responsive center-block\" />"
        divMiddleEnd="<div class=\"panel-image\">" +divImge + "<label for=\"toggle-4\"></label></div>"
        category=JSON.stringify(msg2['items'][0]['volumeInfo']['industryIdentifiers']['categories']);
        title=msg2.items[0].volumeInfo.title;
        author =msg2.items[0].volumeInfo.authors[0];
        categoryLine= "<p>" + category +"</p>"
        previewLink=JSON.stringify(msg2['items'][0]['volumeInfo']['previewLink']);
        previewLinkLine="<p><a href="+ previewLink +"> Preview Link</a></p>"
        heading= "<div class=\"panel-heading\"><h3 class=\"panel-title\">" + title + " by " + author + "</h3></div>"
        buttonFormat="<button class=\"next btn btn-success\">View More Info</button>"

        buttonFormat2="<button class=\"endd btn btn-danger\">Delete from DB</button>"
        midButtonFormat="<div class=\"btn-group\"><a class=\"reads btn btn-xs btn-success\" href=\"#\">Read</a><a class=\"readngs btn btn-xs btn-warning\" href=\"#\">Reading</a><a class=\"unreads btn btn-xs btn-danger\" href=\"#\">Unread</a></div></div>"


        reviewCount=JSON.stringify (msg['books'][0]['average_rating']); 
        goodReadsRating= "<p> Average GoodReads Rating: " +reviewCount +"</p>"
        finalLine=divStart+ heading + divMiddle +divMiddleEnd +   "<div class=\"panel-body\" id=\"" + id + ".." + volumeID + ".." + title + ".." + author + ".." + desc + "\">"   + goodReadsRating + previewLinkLine + buttonFormat  +buttonFormat2+midButtonFormat; 
         $('#gallery').append (finalLine);




        })
         .fail(function() {
            console.log ("Failed, totally");
      });


})
 .fail(function() {
    console.log ("Failed before photos");

}); * +1011 *

По сути, структура такова, что у меня есть файл python для фляги и javascript для скриптов, работающих на статических веб-страницах (и база данных MySQL, использующая MySQLDB, несколько лет назад).

Тем не менее, я продолжаю получать ошибки segfaults и ошибки "двойного освобождения или повреждения (! Prev)" и редко такие ошибки, как "объект GC уже отслежен".

Я не могу понять, с какой стороны происходит ошибка, потому что она, похоже, является одной из этих плавающих ошибок (или проблема просто системная). Я вырезал это, программа segfaults на другой области.

Мне было интересно, есть ли у кого-нибудь еще способ отладки такого рода программ? Я попробовал GDB, и это было не особо полезно.

В общем, могу ли я предположить, что segfault будет происходить со стороны javascript? Будет ли это место для начала?

Я получаю некоторые зависания базы данных, но я несколько раз менял базы данных (с AWS на Google на локальную) просто для проверки, и я по-прежнему получаю ошибки segfaults, когда кажется, что ошибки были сокращены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...