<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137048>137048</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[lldb] SBProcess.GetSTDENV doesn't not return the debugee error messages
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
da-viper
</td>
</tr>
</table>
<pre>
When using the SBProcess from the SBAPI.
It the messages written to stderr is send through stdout.
example code
```cpp
#include <iostream>
int main() {
std::cout << "INFO: from debugee stdout\n";
std::cerr << "ERROR: from debugee stdcerr\n";
}
```
using the SB_API adapted from example/process_events.py
```py
#!/usr/bin/env python3
# name: process_io.py
# ----------------------------------------------------------------------
# Be sure to add the python path that points to the LLDB shared library.
# On MacOSX csh, tcsh:
# setenv PYTHONPATH /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python
# On MacOSX sh, bash:
# export PYTHONPATH=/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python
# ----------------------------------------------------------------------
import lldb
import sys
def handle_events(process: lldb.SBProcess, listener: lldb.SBListener):
event = lldb.SBEvent()
while listener.WaitForEvent(1, event):
state = lldb.SBProcess.GetStateFromEvent(event)
if state == lldb.eStateExited or state == lldb.eStateDetached:
break
elif state == lldb.eStateStopped:
process.Continue()
def main():
exec = sys.argv[1]
debugger = lldb.SBDebugger.Create()
launch_info = lldb.SBLaunchInfo(sys.argv)
target = debugger.CreateTarget(exec)
if not target:
print(f"target is not valid\n target: {exec}", file=sys.stderr)
return
target_error = lldb.SBError()
process = target.Launch(launch_info, target_error)
print(f"launch: {target_error}")
if process and process.GetProcessID() != lldb.LLDB_INVALID_PROCESS_ID:
handle_events(process, debugger.GetListener())
process_stdout = process.GetSTDOUT(1024)
print(f"Process STDOUT:\n{process_stdout}")
process_stderr = process.GetSTDERR(1024)
print(f"Process STDERR:\n{process_stderr}")
process.Kill()
if __name__ == "__main__":
main()
```
compile and run with
`./process_io.py a.out`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8Vl9v4roS_zTmxWoUHGjggQcgZBfd3raC3t29T5GJB-K7wY5sh7bf_mqcBJJu90hHWh2EhBjP_DzzG88fbq08KYAFma7INBnx2hXaLAS_u8gKzOigxfviewGK1laqE3UF0P3q2egcrKVHo8-taPm8DSgJlyRcbp2XncFafgJLX410DhR1mlonwBgqLbWgBHWF0fWpQLGuXWcPb_xclUBzLQAl92HzzasK_7JIqrysBVASraW2zgA_k2jTGEvl6JlLRdiMsDmlJF4hLKUUbyHRkkTLXNcOjUm0poSx7WP6RKJlE42AQ30CaF0i07UijJFo9QsGxnHD2Ox2T7vPQFBvgELipB9U43Wf3Gz5vKVc8MqBaOBaQghLq4b4DC6gnA2q98b8itYIWETYmLC0toaw9IBkpKAutHp3hVZRo0IVPwN63GFKHXTm9O6PfFqwFVBbG8D8cyF8lI0ntOKuoK7gjlZaKmdRBY8fHpIVtQU3IGgpD4ab96AFe1L03zx_2v-guS0IW1OHv9GyPabUgsNYn__78vXp8Xn58pUSli6rqpQ5d1IrS1j6A59WwKuKsHStlUMyCUv3_sbU8DO8avMTRehJcOwkhKU7sLo2OeDhs4_iF8cavw586Be8Vdq4nl8kSv4Zz_5YMuXZh1CW4nD7Z99t-wjDpYAjLbgSJbQvlLBZ-7zwpaFhcO0eSFIprQMFpnf60InYvKEPy86jURIlndYGBU2NtyqvhSzhChh859Kl2nR6Y7wNmj893KakuYM-dutf8AXcHs9So88dzhUi7EPI4w3lCgTeePMmsY61-a1GAo7nBYihV_g5GOA_25ug_ItL9k5X1WcILfkBPiWpargydsvXrVn26H6D3DNi323AzelCpqsxmSbtsW9vJzB90pJWFqwNcHe7iJa8VnmRSXXUff0HL96qoyZsdr3mmk3HzQmajIsh8os_wVS8QT7IhDxSpV1rOuSiMtKn70gYa6Gl9doXXkqBDfpmhzPDg8cJdm22pkdZAokSdLOZYDdH8WPA1Ua1AvxpoDIwRg9I2qBg8GrbBHmlxipomCFs1mPON7oe6CDufnCNTRvEwKINZshXdz1X4vpWvoBrK2CbtFMUx0kXBfadbPv4bfmwTbLn3dN6s99n26Tl-3fVz9a3PH4Bdytyz8XHeupGUjOEPTk97_YvydN_XrCoQzYZZqJPRbektOrR0o_heDUE_4SXDx40g_6jB5vd7u94gOqfeYBvqefBx7r9lyzLDzUrjzTLcHZnWdcJCGNZhnWcZX7N6ALplfYvG0euzxU2TMy8qRV9la6g120i6O0afi-gPECy7sORWERiHs35CBbjeDKdRHHM4lGxmMEhH0fTSSQOszmL4yOIeMLm0f0Yomg-EyO5YCGbhhMWjeeT2SQO8vvDPA_z8F6IKIrFlExCOHNZBmV5OQfanEbS2hoW4ygOJ7NRyQ9QWr-oMqbglfpTDHiajMwCje4O9cmSSYhTwN5gnHSl33D95JomdNjjX5LN4zcqNFhFWOx8W2hK2i8j3TLXVHO31Y5qUy4K5yqcbISlhKUn6Yr6EOT6TFiKl7c_d5XR_4PcEZZ6l3FAtzFdFuz_AQAA___amXa7">