2016-12-28 1 views
1

versuchen, eine große Zeichenfolge in einem Shell-Skript zu passieren, einen Haltepunkt in XcodeXcode Unterbrechungs shell Befehlsargument Länge

let value = Array(repeating: "a", count: 1500).joined() 
let string = "{\"key\": \"\(value)\"}" 

Leider ist die Zeichenfolge abgeschnitten wird. Ist diese Einschränkung dokumentiert und kann sie überwunden werden?

breakpoint

+1

Wenn alles andere fehlschlägt, könnten Sie die LLDB Python-API dazu verwenden, Art von [wie folgt] (https://twitter.com/jtbandes/status/599263355308613634) – jtbandes

+0

Das sieht ziemlich mächtig aus. Vielen Dank! –

+0

@LescaiIonel Haben Sie das jemals gelöst? Ich stoße auf ähnliche Probleme. – Gordonium

Antwort

1

Es ist fast ein Jahr her, dass Sie diese gefragt, und ich bin mir nicht sicher, ob es Ihre Frage zu lösen, aber ich habe erst seit kurzem ein ähnliches Problem, so dachte ich, meine Lösung teilen würde.

hatte ich zwei Fragen:

  1. LLDB Argumente meiner Shell-Skript wurde Kürzen (und String-Variablen in der Konsole gedruckt mit po foo) bis 1023 Zeichen. Ich glaube, das ist das Thema, auf das sich Ihre Frage bezieht.
  2. Xcode war verwirrend falsch ein Komma , in meinen String als Trennzeichen für mehrere Argumente (zB foo vorbei, bar und baz als Argumente an das Skript nicht richtig funktionieren würde, wenn eine der Variablen eine , enthalten als Xcode versuchen würde, um ein anderes Argument zu erstellen).

So zunächst, die LLDB Ausgabe ...

Es scheint, dass standardmäßig LLDB eine Begrenzung für die Zeichenlänge hat, die es auf der Konsole gedruckt wird (oder an einem Shell-Skript übergeben über ein Breakpoint-Argument) von etwa 1023 Zeichen. Sie können dies leicht auf etwas Größeres ändern, indem Sie einen anderen Breakpoint vor den Haltepunkt setzen, der Ihre Variable verwendet und (lldb) set set target.max-string-summary-length 10000 in der Konsole ausführt. Das kann ein bisschen nervig sein, also habe ich eine ~/.lldbinit Datei erstellt und stattdessen set set target.max-string-summary-length 10000 dort platziert, damit ich sie nicht in der Konsole einstellen muss.

Zweitens, das Komma Ausgabe ...

Im Inneren des Edit breakpoint... Menü, das Sie einen Screenshot von oben vorausgesetzt, es besteht die Möglichkeit, nicht nur einen Pfad zu einem Skript zur Verfügung stellen, sondern auch Argumente zu liefern. Ich kann von Ihrer Frage sehen, dass Sie das Argument @[email protected] zur Verfügung gestellt haben. Für mein Skript habe ich mehrere Argumente übergeben. Mit Xcode können Sie eine kommagetrennte Liste verwenden, z. @[email protected], @[email protected], @[email protected]. Jedes dieser Argumente war eine Zeichenfolge.

Ich bemerkte, dass manchmal eine oder mehrere dieser Zeichenfolgen abgeschnitten würden, wenn sie ein Komma enthielten: ,.

So ist die Zeichenfolge:

{ "num_friends" : "7" }

würde mein Skript übergeben werden, wie erwartet. Aber die Zeichenfolge:

{ "num_friends" : "7", "num_deleted_friends" : "1" }

würde gestutzt und würden als zwei separate Argumente an mein Skript übergeben werden. Es scheint, dass Xcode jede Zeichenfolge mit einer , teilen würde, auch wenn sie mit @[email protected] eingegeben wird.

ich validiert diese in meinem Skript, indem Sie einfach mit so etwas wie:

for var in "[email protected]" 
do 
    echo "$var" 
    echo "====" 
done 

Wo [email protected] jedes Argument enthalten erweitert. Von diesem konnte ich sehen, dass @[email protected] korrekt an mein Skript übergeben wurde, aber als mehrere Argumente getrennt, wo immer es einen , gab. Also, wenn @[email protected] ein Komma mein Skript enthalten würde drucken:

@"{ \"num_friends\" : \"7\" 
==== 
\"num_deleted_friends\" : \"1\" }" 

statt dessen, was ich erwartet hatte, das war:

@"{ \"num_friends\" : \"7\", \"num_deleted_friends\" : \"1\" }" 

So scheint es, als wäre es ein Fehler in sein könnte, wie Xcode passiert Strings innerhalb @ Ausdrücke im Haltepunkt-Editor-Fenster.

Meine rohe Lösung war es, nur Kommas durch ein anderes Zeichen zu ersetzen und sie dann wieder in meinem Skript zu ersetzen. Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber ich brauche es nicht für meine Bedürfnisse.

Verwandte Themen