1

、、、の3 つのファイルfoo1foo2ありfoo3ます。

foo2で関数をfoo3呼び出しますfoo1

関数のパラメーターとして渡すことなく、呼び出し元のファイル名と行番号を foo1 に検出させようとしています。

これどうやってするの?

4

2 に答える 2

2

これはプラットフォームとコンパイラに大きく依存し、通常は実行できません。システムには、GNU 関数などの拡張機能が含まれている場合backtraceがあります。

于 2012-09-24T18:09:47.977 に答える
1

ネイティブプログラムを実行する場合、ファイルと行の概念はもはや根拠がありません。プログラムは、プロセッサへのコマンドのストリームにすぎません。関数の名前、変数、行番号、ファイル名など、すべてがコンパイル中に失われます。

プログラムからデバッグ情報を抽出することは事実上不可能です。そのプログラムは、デバッグ情報を添付するために特別にコンパイルする必要があります。(Visual C ++のように)デバッグ情報が別のファイルに抽出されることもありますが、その情報を抽出するには、そのファイルとその形式を知っている必要があります。そして、デバッグ情報のみを取得します。コンパイルされたコードではありません。

パラメータは行く方法です。

于 2012-09-25T23:57:35.050 に答える