特定のポイントでCアプリケーションのスタック情報を取得する必要があります。私はドキュメントを読んでネットを検索しましたが、どうやってそれをやり遂げることができないのか分かりません。あなたは簡単なプロセスの説明を指すことができますか?あるいは、スタックの巻き戻しの例に、より良い。私はHP-UX(Itanium)とLinuxに必要です。HP-UXとLinuxでのスタック解凍
5
A
答えて
4
ここ
は、APIリファレンスであるのlinux/stacktrace.hをチェックアウト:
http://www.cs.cmu.edu/afs/cs/Web/People/tekkotsu/dox/StackTrace_8h.html
はここ
すべてのLinuxカーネルで動作するはずですがからCに代替例であります
http://www.linuxjournal.com/article/6391
#include <stdio.h>
#include <signal.h>
#include <execinfo.h>
void show_stackframe() {
void *trace[16];
char **messages = (char **)NULL;
int i, trace_size = 0;
trace_size = backtrace(trace, 16);
messages = backtrace_symbols(trace, trace_size);
printf("[bt] Execution path:\n");
for (i=0; i<trace_size; ++i)
printf("[bt] %s\n", messages[i]);
}
int func_low(int p1, int p2) {
p1 = p1 - p2;
show_stackframe();
return 2*p1;
}
int func_high(int p1, int p2) {
p1 = p1 + p2;
show_stackframe();
return 2*p1;
}
int test(int p1) {
int res;
if (p1<10)
res = 5+func_low(p1, 2*p1);
else
res = 5+func_high(p1, 2*p1);
return res;
}
int main() {
printf("First call: %d\n\n", test(27));
printf("Second call: %d\n", test(4));
}
3
あなたはlibunwind見たい - これは(特に複雑です)Itaniumのスタックトレースを巻き戻すためにHPが独自に開発したクロスプラットフォームのライブラリです。その後他の多くのプラットフォームにも拡張されました。 x86-LinuxとItanium-HPUXの両方が含まれます。
libunwind(3)のマニュアルページから、ここでは典型的な 'ショーのバックトレース' 関数を書くことlibunwindの使用例です:
#define UNW_LOCAL_ONLY
#include <libunwind.h>
void show_backtrace (void) {
unw_cursor_t cursor; unw_context_t uc;
unw_word_t ip, sp;
unw_getcontext(&uc);
unw_init_local(&cursor, &uc);
while (unw_step(&cursor) > 0) {
unw_get_reg(&cursor, UNW_REG_IP, &ip);
unw_get_reg(&cursor, UNW_REG_SP, &sp);
printf ("ip = %lx, sp = %lx\n", (long) ip, (long) sp);
}
}
0
のHP-UX Itaniumのためのこのshoulw作品は: http://docs.hp.com/en/B9106-90012/unwind.5.html
簡単なスタックトレースの場合は、(U_STACK_TRACEを試してみてください)。
関連する問題
- 1. Linux/HPUXの正規表現
- 2. Linuxカーネルのプリ解凍ステージをデバッグ
- 3. HPUXでのリモートデバッグ
- 4. Swfの操作と解凍
- 5. Silverlightでフォルダとそのサブフォルダを解凍して解凍する方法は?
- 6. C#圧縮とJavaScript解凍
- 7. Linuxスタックとは何ですか?
- 8. バッチで.gzファイルの解凍
- 9. SBTでアーティファクトの解凍
- 10. Emacs内で解凍/解凍するには
- 11. Linuxボックスに自己解凍型zipアーカイブを作成する
- 12. 解凍ジュリア
- 13. 解凍ファイル
- 14. zlib/libz.dylib解凍
- 15. ZLib解凍
- 16. Powershell解凍エラー
- 17. 解凍gzipファイル
- 18. Python解凍バッファーデータ
- 19. ASIHTTPRequest zlib解凍
- 20. zlib c解凍
- 21. 解凍データセット
- 22. JavaScript:圧縮解除/拡張/解凍/解凍文字列
- 23. ゲームエンジンのランタイム解凍
- 24. Mavenアセンブリの解凍
- 25. 圧縮データとJavaScriptで解凍
- 26. 速報でEpubを解凍
- 27. 圧縮コマンドラインからのコピーと解凍
- 28. LinuxカーネルのTCP/IPスタック
- 29. ハードウェアJPEG解凍/ Win32
- 30. GDCM python DICOM解凍
APIが存在することはわかりませんでした。どのように便利です! – Jamie
HP-UX用には役に立ちません。 – DaveR
@dave、nit-picker:P –