2016-03-23 9 views
0

私はCプロジェクトでTLS変数を使用して、スレッドスコープ全体で有効ないくつかの変数を定義することに決めました。ここでlldbはTLS変数を出力できません

は私の宣言です: static __thread char log_username[100];

しかし、lldbデバッガは、以下の理由のためにそれらを表示するために失敗する何らかの理由:

(lldb) print log_username[2] 
error: Couldn't materialize: couldn't get the value of variable log_username: 
No TLS data currently exists for this thread. 
Errored out in Execute, couldn't PrepareToExecuteJITExpression 

デバッガはTLSデータが現在利用可能ではないと述べているが、私は単純なprintfを使用する場合、それは動作します。

これを解決する、またはちょうど私が一緒に暮らすことができるデバッガの制限として、それを治療するために、どのように任意のアイデアが...

+1

[このLLDBチュートリアル](http://lldb.llvm.org/tutorial.html)には、「スレッドの状態を調べる」というセクションがあり、スレッドの一覧表示とスレッドコンテキストの選択を行うコマンドを示しています。これが問題であるかどうかわからない場合は、それが機能するための正しいスレッドコンテキストを選択したいでしょうか? –

答えて

2

lldbは現在、(Linuxではわからない。)OS X上でスレッドローカルストレージ変数をサポートしていません。この問題を回避するには、TLS変数のアクセサー関数を作成し、適切なスレッドを選択した後でそれらを呼び出す方法があります。

関連する問題