Debugging 如何调试内部Rust宏

Debugging 如何调试内部Rust宏,debugging,rust,rust-macros,Debugging,Rust,Rust Macros,我正在尝试调试Serde中的一个问题,我可以很好地逐步完成我的代码,但不幸的是,Serde就像90%的宏,因此对反序列化()的整个调用似乎映射到包含#[派生(反序列化)]的行,我无法设置它 这有什么办法吗?如果是我写的代码,我想我可以使用cargo expand,但它在另一个板条箱中,所以我不知道如何操作。您使用的调试器是什么?是什么让你认为进入Serde的代码是个好主意?为什么你不能在Serde的一个函数中设置一个断点?你是否尝试过货物扩展?宏来自何处并不重要,它适用于任何情况,包括内置的pr

我正在尝试调试Serde中的一个问题,我可以很好地逐步完成我的代码,但不幸的是,Serde就像90%的宏,因此对
反序列化()
的整个调用似乎映射到包含
#[派生(反序列化)]
的行,我无法设置它


这有什么办法吗?如果是我写的代码,我想我可以使用
cargo expand
,但它在另一个板条箱中,所以我不知道如何操作。

您使用的调试器是什么?是什么让你认为进入Serde的代码是个好主意?为什么你不能在Serde的一个函数中设置一个断点?你是否尝试过
货物扩展
?宏来自何处并不重要,它适用于任何情况,包括内置的
println
@mcarton:我使用的是
lldb
,为什么不使用Serde的代码呢@彼得·霍尔:是的。问题是它只在我的代码中扩展宏。如果我在Serde的代码中单步执行宏,则没有任何帮助。(我确实设法用
cargo expand
解决了我最初的问题,但问题仍然存在——我如何在另一个使用宏的板条箱代码中调试问题?)进入Serde的代码似乎不是一个好主意,因为它是一个经过良好测试的库,生成了大量代码。如果您确实认为serde中存在缺陷,那么我会将断点(或正则表达式BP)放置到一些有趣的serde方法上。这很愚蠢。所有软件。您使用的调试器是什么?是什么让你认为进入Serde的代码是个好主意?为什么你不能在Serde的一个函数中设置一个断点?你是否尝试过
货物扩展
?宏来自何处并不重要,它适用于任何情况,包括内置的
println
@mcarton:我使用的是
lldb
,为什么不使用Serde的代码呢@彼得·霍尔:是的。问题是它只在我的代码中扩展宏。如果我在Serde的代码中单步执行宏,则没有任何帮助。(我确实设法用
cargo expand
解决了我最初的问题,但问题仍然存在——我如何在另一个使用宏的板条箱代码中调试问题?)进入Serde的代码似乎不是一个好主意,因为它是一个经过良好测试的库,生成了大量代码。如果您确实认为serde中存在缺陷,那么我会将断点(或正则表达式BP)放置到一些有趣的serde方法上。这很愚蠢。所有软件。