Gewusst wie: Debuggen von Abstürzen in externen Bibliotheken
Meine Rost-code abstürzt, irgendwo in Rost-http und ich habe keine Ahnung, wie das zu Debuggen.
Bekomme ich diese Fehlermeldung wenn ich es ausführen:
$ ./target/ecmiwc -i www.google.com -u testuser -v test
task '<main>' failed at 'called `Option::unwrap()` on a `None` value', /Users/rustbuild/src/rust-buildbot/slave/nightly-mac/build/src/libcore/option.rs:262
Ich würde gerne einige Anweisungen, wie man die code aufrufen der Option::unwrap()
.
Wie kann ich die trigger eine core-Datei, oder gibt es eine andere Möglichkeit um mehr Infos zu bekommen?
Meine Programmierkenntnisse vor allem in den dynamischen Sprachen, wo ein crash liefert einen vollen backtrace und es ist ziemlich leicht zu finden, die problematische code. Wie bekomme ich ähnliche Informationen mit Rost?
Später Bearbeiten:
Basiert auf der Antwort von Steve K, ich aktiviert backtrace env aber, leider, die Ablaufverfolgung ist nicht sehr nützlich:
$ RUST_BACKTRACE=1 ./target/ecmiwc -i www.google.com -u testuser -v test
task '<main>' failed at 'called `Option::unwrap()` on a `None` value', /Users/rustbuild/src/rust-buildbot/slave/nightly-mac/build/src/libcore/option.rs:262
stack backtrace:
1: 0x10b70c065 - rt::backtrace::imp::write::h471bb232e1b48857jar
2: 0x10b70f1ef - failure::on_fail::h05edea1dadf8fbaaOqr
3: 0x10b715e25 - unwind::begin_unwind_inner::h7c6fecebc6991c8bS5d
4: 0x10b715a5b - unwind::begin_unwind_fmt::h227376fe1e021a36n3d
5: 0x10b7158b2 - rust_begin_unwind
6: 0x10b73769c - failure::begin_unwind::h7d8f396ab219c1bbn5j
7: 0x10b5a2cce - option::Option<T>::unwrap::h6219013626023885255
8: 0x10b5a25e8 - client::request::RequestWriter<S>::connect::h10689478801106876767
9: 0x10b59d523 - Ecm::login::h463674fdedafce079ja
10: 0x10b5ab502 - main::h2d8f53839ca9df9eDJa
11: 0x10b6fd879 - start::closure.8479
12: 0x10b716b3c - rust_try_inner
13: 0x10b716b26 - rust_try
14: 0x10b713e0b - unwind::try::h5982dbe8fdfe64a5nUd
15: 0x10b713beb - task::Task::run::h1c9de674e75b1485v2c
16: 0x10b6fd6af - start::h15d3cd64eea8fd88hve
17: 0x10b6fd4dc - lang_start::h7823875e69d425d0Bue
18: 0x10b5ab6df - main
Bin ich etwas fehlt?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
RUST_BACKTRACE
Umgebungsvariable geben Sie ein backtrace. Versuchenset RUST_BACKTRACE=1
Der backtrace zeigt, dass
client::request::RequestWriter<S>::connect
aus Rost-http ist, was den Aufruf derunwrap
Fehler aufgetreten ist. Dies ist der Körper der Methode:Den
unwrap
nennen, es ist aufself.headers.host.as_ref()
; dies deutet darauf hin, dassself.headers.host
istNone
, das sollte es nicht sein (new
/new_request
setzen, haben Sie das geändert?).Können Sie auch tun, eine Gründliche Arbeit von debugging, indem Sie Gebäude mit debug-Symbolen (ich bin nicht wirklich sicher, Ladung kann das doch machen) und die Verwendung von gdb. Der Haltepunkt gesetzt ist benannt
rust_fail
.let mut headers = box HeaderCollection::new(); headers.insert_raw("test".to_string(), self.test.as_bytes()); headers.authorization = Some(auth_b64); request.headers = headers;
request.headers.insert_raw("test".to_string(), self.test.as_bytes()); request.headers.authorization = Some(auth_b64);
. Vermieden werden blotting schon raus-set Kopfzeilen, wie dieHost
- header, die Sie versehentlich abgerissen und was benötigt wird.