如果我想调试通过 "pip install packagename" 安装的包 packagename 的 setup.py 文件,有没有办法这样做?我尝试下载源代码,在 setup.py 中添加 set_trace() 并运行:
pip install .
Run Code Online (Sandbox Code Playgroud)
但是,一旦我收到 pdb() 提示,安装就会失败并显示错误:
processing /Users/skauser/python-ibmdb/IBM_DB/ibm_db
Complete output from command python setup.py egg_info:
> /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py(31)<module>()
-> machine_bits = 8 * struct.calcsize("P")
(Pdb)
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
machine_bits = 8 * struct.calcsize("P")
File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
machine_bits = 8 * struct.calcsize("P")
File "/Library/anaconda3/lib/python3.7/bdb.py", line 88, in trace_dispatch
return self.dispatch_line(frame)
File "/Library/anaconda3/lib/python3.7/bdb.py", …Run Code Online (Sandbox Code Playgroud) 我有一个编译为使用 32 位有符号整数的库。当其他应用程序使用标志编译它们时,例如:-DODBC64 它将我在库中使用的相同类型提升为 64 位有符号整数。例如:
#ifdef ODBC64
typedef sint64 SLEN;
#else
#define SLEN int
#endif
Run Code Online (Sandbox Code Playgroud)
当应用程序将引用传递给我的库时:
SLEN count;
mylibraryfunction(&count);
Run Code Online (Sandbox Code Playgroud)
返回给应用程序的值如下所示:
sizeof(SLEN) = 8
sizeof(SLEN) in my library = 4
m_AffectedRows BEFORE = 0x3030303030303030
m_AffectedRows AFTER = 0x3030303000000000 0
Run Code Online (Sandbox Code Playgroud)
您可以看到我的库中的分配正在复制 4 个字节(值 0)。我需要知道一种将高 4 个字节重置为 0 的方法。例如:
0x0000000000000000
Run Code Online (Sandbox Code Playgroud)
我已经尝试了 static_cast 和 reinterpret_cast,但都没有帮助。