2016-06-14 8 views
5

/src/lib.rsの中にlibがあります。これはGDBでのデバッグの準備です。GDBで錆デバッグライブラリ

rustc -g --crate-type lib libr.rs 

検索方法がわかりましたか。出力ファイルには、次の名前liblib.rlib

は今GDBを実行している - file lib.rsを実行し、それは奇妙なファイルliblib.rlibと実行形式と同じではありませんと言われます。私はそれが実行可能ファイルではないことを知っていますが、私が起動できる代替ファイルもわかりません。

これで、Rustのlibのデバッグを今すぐ開始できますか?

+1

このlibにデバッグするテストがありますか? – user25064

+0

テストは/tests/raindrops.rs内にありませんが、実際にはそうです。テストや呼び出しをデバッグしたい場合は – xetra11

答えて

5

実行可能ファイル以外のデバッグはできません。デバッガは、実行中のプロセスのメモリを検査して動作します。実行可能ファイルなしでは、プロセスを持つことはできません。

と仮定すると、この2つのファイル:

のsrc/lib.rs

pub fn add_one(i: u8) -> u8 { 
    i + 2 
} 

#[test] 
fn inline_test() { 
    assert_eq!(2, foo::add_one(1)); 
} 

テスト/ awesome.rs

extern crate foo; 

#[test] 
fn a_test() { 
    assert_eq!(6, foo::add_one(5)); 
} 

あなたがcargo buildまたはcargo test、テストバイナリを実行で作成されますディレクトリ。この場合、foo-69521add8c82059aと呼ばれる1つのバイナリと、awesome-4a24b21e22bc042aと呼ばれる1つのバイナリがあります。いずれかのプログラムを実行すると、一連のテストが実行されます。すべてのRustテストはこのように動作します。何らかの種類の実行可能ファイルが生成され、実行されます(コマンドラインフラグの正しいセットで)テストが実行されます。

この実行可能ファイルを使用すると、GDBまたはLLDBでデバッグするために必要なものです:

$ rust-lldb target/debug/awesome-4a24b21e22bc042a 

(lldb) br set -r '.*add_one.*' 
(lldb) r 
Process 59413 launched: '/private/tmp/foo/target/debug/awesome-4a24b21e22bc042a' (x86_64) 

running 1 test 
Process 59413 stopped 
* thread #2: tid = 0xe9637, 0x0000000100038a3e awesome-4a24b21e22bc042a`foo::add_one::ha28bd7bf9dda9f1d + 14 at lib.rs:2, name = 'a_test', stop reason = breakpoint 1.1 
    frame #0: 0x0000000100038a3e awesome-4a24b21e22bc042a`foo::add_one::ha28bd7bf9dda9f1d + 14 at lib.rs:2 
    1 pub fn add_one(i: u8) -> u8 { 
-> 2  i + 2 
    3 } 

rustc -g --crate-type lib libr.rs

これはほとんどの人がやりたいするつもりはありません貨物を、使用して回避します。この行の重要な側面は、デバッギング情報を追加するようにコンパイラに指示する-gフラグです。 cargo buildまたはcargo testはデフォルトでデバッグモードでコンパイルされます。 build your tests in release modeも可能です。

+0

どのような場合でも、ターゲット/デバッグのテストファイルはデバッグできますか? – xetra11

+0

@ xetra11 'target/debug'で生成された実行ファイルはデバッグすることができます。 – Shepmaster